直接给结论:完全可以,而且这是 Linux 环境下最经典、最主流的开发测试环境搭建方式之一。
但在实际动手之前,有几个非常关键的技术细节和“坑”,你需要提前知道,否则很容易把自己绕进去。
1. 核心冲突:Nginx 和 Apache 能共存吗?
这是新手最容易犯的错误。默认情况下,Nginx 和 Apache 不能同时监听 80 端口(HTTP)或 443 端口(HTTPS)。因为操作系统不允许两个进程绑定同一个 IP+Port 组合。
所以,你有三种常见的玩法:
玩法 A:二选一(推荐)
- 只用 Nginx:适合高并发、静态资源服务、反向XX场景。Ubuntu 上安装
nginx包即可。 - 只用 Apache:适合需要
.htaccess动态配置、PHP 模块集成度要求高的传统场景。Ubuntu 上安装apache2包即可。
大多数现代 Web 开发(尤其是前后端分离、Node.js、Python Django/Flask + Nginx 反向XX)都倾向于 Nginx。
玩法 B:Nginx 做前端,Apache 做后端(反向XX)
这是一种高级用法。Nginx 监听 80 端口,负责处理静态文件、SSL 终止、负载均衡;然后将动态请求(如 PHP、Java、Go)通过 proxy_pass 转发到本地另一个端口(比如 8080 或 9000),由 Apache 或其他应用服务器处理。
- 注意:这种情况下,Apache 必须修改配置文件,将 Listen 端口从 80 改为其他端口(如 8080),否则启动时会报错。
玩法 C:不同域名/路径区分
理论上可以通过虚拟主机(Virtual Host)配置让两者监听不同接口,但这在单机开发环境中意义不大,反而增加复杂度,不推荐。
2. MySQL 的安装与选择
Ubuntu 桌面版默认软件源里提供的 MySQL 版本可能不是最新的,或者你更倾向于使用 MariaDB(MySQL 的一个分支,兼容性极好,且在 Ubuntu 中常作为默认替代)。
-
如果你坚持用 MySQL:
sudo apt update sudo apt install mysql-server安装完成后,建议运行安全脚本:
sudo mysql_secure_installation设置 root 密码,移除匿名用户等。
-
关于认证插件:
新版 MySQL (5.7+) 和 MariaDB (10.4+) 默认使用caching_sha2_password认证插件。有些老旧的 IDE 或数据库客户端(如旧版 Navicat、DBeaver)连接时会报错。如果遇到这个问题,可以修改用户认证方式为mysql_native_password,或者升级你的客户端工具。
3. 一键式方案 vs 手动安装
虽然你可以分别安装 Nginx/Apache + MySQL + PHP/Python/Node.js,但对于开发测试来说,效率更重要。
方案一:LAMP / LEMP 栈(手动但灵活)
- LEMP: Linux + EnginX (Nginx) + MySQL + PHP
- LAMP: Linux + Apache + MySQL + PHP
优点:组件独立,便于调试每个服务的日志,配置自由度高。
缺点:需要分别配置,环境变量管理稍麻烦。
方案二:Docker(强烈推荐用于开发测试)
既然你是做开发测试,强烈建议使用 Docker。它解决了环境一致性、端口冲突、依赖污染等问题。
# docker-compose.yml 示例
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
这样即使你装了 Apache,也可以再跑一个 Nginx 容器,完全隔离,互不干扰。
4. 权限与安全提醒
- 不要用 root 运行 Web 服务:Nginx/Apache 主进程可能是 root 启动的,但工作进程会以
www-data用户身份运行。确保你的项目目录权限正确:sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html - 防火墙:Ubuntu 默认启用
ufw。安装好服务后,记得放行端口:sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw allow 3306/tcp # MySQL(仅当需要从外部访问时才开,本地开发通常不需要)
总结建议
- 如果只是快速搭建测试环境:装 Nginx + MySQL + PHP/Node.js,用
apt直接装,简单粗暴。 - 如果需要多项目并行、避免端口冲突:用 Docker Compose,这是目前业界标准做法。
- 不要同时让 Nginx 和 Apache 监听 80 端口,除非你明确知道自己在做反向XX架构。
Ubuntu 桌面版作为开发机是非常合适的,GUI 方便操作,终端又强大,比 Windows 上的 WSL 在某些底层调试场景下更直观,也比纯服务器版少了很多折腾 GUI 的麻烦。放心装吧。
云技术博客