在轻量服务器上托管多个网站,Nginx 是理想选择。核心思路是通过虚拟主机(server block)为每个域名配置独立的站点根目录、日志和 SSL 证书。以下是完整实操指南:
✅ 前提准备
-
已安装 Nginx
# Ubuntu/Debian sudo apt update && sudo apt install nginx -y # CentOS/RHEL sudo yum install epel-release && sudo yum install nginx -y -
域名已解析到服务器 IP(DNS A 记录指向你的公网 IP)
-
服务器防火墙开放 80/443 端口
sudo ufw allow 'Nginx Full' # Ubuntu sudo firewall-cmd --permanent --add-service=http --add-service=https sudo firewall-cmd --reload # CentOS
📁 步骤 1:创建网站目录结构
sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html
# 设置权限(根据需求调整用户组)
sudo chown -R www-data:www-data /var/www/site1/html
sudo chown -R www-data:www-data /var/www/site2/html
💡 建议:将
site1、site2替换为你的实际域名(如example.com、test.org),便于管理。
🌐 步骤 2:配置 Nginx 虚拟主机
示例:/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
示例:/etc/nginx/sites-available/test.org
server {
listen 80;
listen [::]:80;
server_name test.org www.test.org;
root /var/www/test.org/html;
index index.php index.html;
# PHP-FPM 支持(如需动态站点)
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
access_log /var/log/nginx/test.org.access.log;
error_log /var/log/nginx/test.org.error.log;
}
🔔 注意:
- 若需 HTTPS,后续可添加
listen 443 ssl;+ssl_certificate等配置(推荐用 Let’s Encrypt 自动签发)- 每个域名必须独立一个
server块,server_name不能重复
🔗 步骤 3:启用站点并测试配置
# 创建符号链接(Ubuntu/Debian)
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.org /etc/nginx/sites-enabled/
# 或手动启用(CentOS 默认无 sites-enabled,直接复制到 conf.d)
sudo cp /etc/nginx/sites-available/*.conf /etc/nginx/conf.d/
# 检查语法
sudo nginx -t
# 重载 Nginx
sudo systemctl reload nginx
✅ 验证成功标志:syntax is ok 且 test successful
🛡️ 可选增强:HTTPS(Let’s Encrypt 自动证书)
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx # Debian/Ubuntu
# 或
sudo yum install certbot python3-certbot-nginx # CentOS
# 自动申请并配置 HTTPS
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot --nginx -d test.org -d www.test.org
Certbot 会自动修改 Nginx 配置、添加重定向(HTTP→HTTPS)、设置自动续期。
🧪 快速测试
访问:
http://example.com→ 应显示/var/www/example.com/html/index.htmlhttp://test.org→ 应显示对应内容
查看日志确认:
tail -f /var/log/nginx/example.com.access.log
⚠️ 常见问题排查
| 问题 | 解决方案 |
|---|---|
| 403 Forbidden | 检查 root 路径是否存在 + 权限是否正确 (ls -l /var/www/xxx/html) |
| 502 Bad Gateway | 后端服务未启动(如 PHP-FPM);检查 fastcgi_pass 地址 |
| 所有请求都进第一个站 | default_server 冲突?确保每个 server 明确指定 server_name,删除默认站点中的 default_server |
| 修改后未生效 | 执行 nginx -t && systemctl reload nginx |
需要我提供:
- 一键部署脚本模板?
- WordPress 多站点配置示例?
- Docker + Nginx 反向X_X方案?
欢迎告诉我你的具体场景(如:是否含 PHP/Node.js/静态页面),我可进一步定制优化方案。
PHPWP博客