是的,完全可以在同一台服务器上同时运行 Nginx、MySQL 和 Node.js 服务。这是非常常见的部署架构,尤其适用于中小型应用。
✅ 为什么可以共存?
这三个服务使用不同的端口和资源:
| 服务 | 默认端口 | 资源类型 |
|---|---|---|
| Nginx | 80 (HTTP), 443 (HTTPS) | Web 服务器/反向 |
| MySQL | 3306 | 数据库服务 |
| Node.js | 通常 3000, 5000 等自定义端口 | 应用服务器 |
由于端口不同,它们不会冲突,可以并行运行。
🧩 典型部署架构示例
用户请求
↓
Nginx (监听 80/443)
├──→ 静态文件(HTML/CSS/JS)直接返回
└──→ 动态请求 → 反向到 Node.js (如 localhost:3000)
↓
Node.js 处理业务逻辑
↓
访问 MySQL (localhost:3306)
🔧 如何配置共存?
1. 安装各服务(以 Ubuntu 为例)
# 更新系统
sudo apt update
# 安装 Nginx
sudo apt install nginx
# 安装 MySQL
sudo apt install mysql-server
# 安装 Node.js(推荐使用 nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18 # 或其他 LTS 版本
# 安装 PM2 管理 Node.js 进程
npm install -g pm2
2. 启动并设置开机自启
sudo systemctl enable nginx
sudo systemctl enable mysql
# Node.js 使用 PM2 管理
pm2 start app.js --name "myapp"
pm2 startup # 设置 PM2 开机启动
3. Nginx 配置反向
编辑 /etc/nginx/sites-available/default:
server {
listen 80;
server_name your-domain.com;
# 静态资源
location /static/ {
alias /path/to/your/static/files/;
}
# 所有其他请求转发给 Node.js
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
测试并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
⚠️ 注意事项
- 资源分配:确保服务器内存足够(建议至少 2GB RAM,尤其是运行数据库)。
- 安全配置:
- 为 MySQL 设置强密码,避免远程 root 登录。
- 使用
ufw防火墙限制端口访问。 - Nginx 启用 HTTPS(可用 Let’s Encrypt 免费证书)。
- 进程管理:Node.js 建议使用 PM2、Forever 或 systemd 管理,避免崩溃后无法恢复。
- 日志监控:定期查看各服务日志(
/var/log/nginx/,journalctl -u mysql,pm2 logs)。
✅ 总结
在一台服务器上运行 Nginx + MySQL + Node.js 是成熟且高效的方案,特别适合:
- 初创项目
- 个人博客或小工具
- 内部管理系统
- MVP 快速验证
随着流量增长,可逐步拆分服务到不同服务器或使用云服务(如 RDS 托管数据库)。
需要我提供一个完整的部署脚本或 Docker 版本吗?
CLOUD技术笔记