在 Linux 服务器上通过 Nginx 部署多个 Web 站点,核心思路是为每个站点创建独立的 server 配置块,并通过域名或端口区分访问。以下是完整步骤(以 Ubuntu/Debian 为例):
✅ 前提条件
- 已安装 Nginx:
sudo apt update && sudo apt install nginx - 至少两个域名(如
site1.com,site2.com),且 DNS 已指向服务器 IP - 各站点代码目录(例如
/var/www/site1,/var/www/site2)
🔧 步骤详解
1️⃣ 创建站点目录与基础文件
# 创建站点目录
sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html
# 设置权限(示例:所有者为 www-data)
sudo chown -R www-data:www-data /var/www/site1/html
sudo chown -R www-data:www-data /var/www/site2/html
# 创建测试页面
echo "<h1>Welcome to Site 1</h1>" | sudo tee /var/www/site1/html/index.html
echo "<h1>Welcome to Site 2</h1>" | sudo tee /var/www/site2/html/index.html
2️⃣ 创建 Nginx 站点配置文件
推荐将配置放在
/etc/nginx/sites-available/,并软链接到sites-enabled/
# 复制默认配置作为模板(可选)
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/site1.conf
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/site2.conf
编辑 site1.conf:
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 可选:启用日志
access_log /var/log/nginx/site1_access.log;
error_log /var/log/nginx/site1_error.log;
}
编辑 site2.conf(注意 server_name 和 root 不同):
server {
listen 80;
server_name site2.com www.site2.com;
root /var/www/site2/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/site2_access.log;
error_log /var/log/nginx/site2_error.log;
}
3️⃣ 启用站点配置
# 禁用默认配置(避免冲突)
sudo rm /etc/nginx/sites-enabled/default
# 启用新站点
sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
4️⃣ 测试配置语法并重启 Nginx
sudo nginx -t # 检查配置是否正确
sudo systemctl reload nginx # 重载配置(无需中断服务)
# 若需完全重启:sudo systemctl restart nginx
5️⃣ 本地 hosts 测试(无 DNS 时)
在客户端机器修改 /etc/hosts:
192.0.2.1 site1.com www.site1.com
192.0.2.1 site2.com www.site2.com
然后浏览器访问 http://site1.com 和 http://site2.com 验证。
🌐 进阶方案(可选)
| 需求 | 实现方式 |
|---|---|
| HTTPS | 使用 Let’s Encrypt + Certbot:sudo certbot --nginx -d site1.com -d site2.com |
| 同一域名不同路径 | 用 location /api/ { ... } 区分,而非多 server 块 |
| 反向X_X后端应用 | proxy_pass http://127.0.0.1:3000; |
| 基于端口的多站点 | listen 8080; server_name *:8080;(不推荐生产环境) |
⚠️ 注意事项
- 确保防火墙开放 80/443 端口:
sudo ufw allow 'Nginx Full' - 定期检查错误日志:
tail -f /var/log/nginx/error.log - 使用
systemctl status nginx监控服务状态
需要我提供带 SSL、PHP 支持或 Docker 集成的完整示例吗?
PHPWP博客