加油
努力

单台阿里云服务器部署多站点时,Nginx怎么配置?

在单台阿里云服务器(ECS)上部署多个站点,核心思路是利用 Nginx 的虚拟主机(Server Block)功能,通过 server_name 域名匹配不同的请求,并将它们指向不同的网站目录。

以下是完整的配置流程和最佳实践:

1. 准备工作

假设你有两个域名:

  • example.com (主站) -> 部署在 /var/www/html/example.com
  • blog.example.com (博客) -> 部署在 /var/www/html/blog

确保你的域名 DNS 解析已正确指向该阿里云服务器的公网 IP。

2. 创建网站目录结构

首先创建对应的目录和文件:

# 创建目录
sudo mkdir -p /var/www/html/example.com/public_html
sudo mkdir -p /var/www/html/blog/public_html

# 设置权限 (建议将 www-data 替换为你实际运行的用户,如 nginx 或 root)
sudo chown -R $USER:$USER /var/www/html/example.com/public_html
sudo chown -R $USER:$USER /var/www/html/blog/public_html

# 创建简单的测试页面
echo "<h1>Example.com Home</h1>" | sudo tee /var/www/html/example.com/public_html/index.html
echo "<h1>Blog Page</h1>" | sudo tee /var/www/html/blog/public_html/index.html

3. 编写 Nginx 配置文件

Nginx 默认通常在 /etc/nginx/sites-available/ 下管理配置,或者直接在 /etc/nginx/conf.d/ 下创建独立文件。推荐使用 sites-available 方式(类似 Debian/Ubuntu 标准),或者直接新建一个 .conf 文件。

这里演示直接创建一个名为 multi-site.conf 的文件(路径:/etc/nginx/conf.d/multi-site.conf)。

# 定义主域名站点
server {
    listen 80;
    server_name example.com www.example.com;

    # 根目录
    root /var/www/html/example.com/public_html;
    index index.html index.htm;

    # 日志路径
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

# 定义子域名站点
server {
    listen 80;
    server_name blog.example.com;

    # 根目录
    root /var/www/html/blog/public_html;
    index index.html index.htm;

    # 日志路径
    access_log /var/log/nginx/blog.access.log;
    error_log /var/log/nginx/blog.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

关键配置说明:

  • listen 80: 监听 HTTP 流量。如果有多台机器需要 HTTPS,通常也会配置 listen 443 ssl
  • server_name: 这是区分站点的核心。Nginx 会根据请求头中的 Host 字段匹配到对应的代码块。
  • root: 指定该站点静态文件的物理路径。
  • location /: 处理具体的 URL 请求逻辑。

4. 验证与重载配置

配置完成后,必须先检查语法是否正确,然后重启服务。

# 1. 检查配置语法
sudo nginx -t

# 如果输出包含 "syntax is ok" 和 "test is successful",则继续下一步
# 如果报错,根据提示修改配置文件

# 2. 重载 Nginx (平滑重启,不中断现有连接)
sudo nginx -s reload

# 或者重启服务
sudo systemctl restart nginx

5. 进阶:配置 HTTPS (SSL)

生产环境强烈建议开启 HTTPS。可以使用 Let’s Encrypt 免费证书。以 Certbot 为例:

# 安装 certbot 插件
sudo apt install certbot python3-certbot-nginx

# 一键申请并配置所有域名
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com

运行后,Certbot 会自动修改上述配置文件,添加 SSL 监听端口、证书路径以及自动跳转 HTTP 到 HTTPS 的规则。

6. 常见问题排查

  • 403 Forbidden: 通常是目录权限问题。确保目录所有者是 Nginx 运行用户(如 www-datanginx),且父目录有执行权限 (chmod 755)。
  • 404 Not Found: 检查 root 路径是否拼写错误,或者 index 文件名是否存在。
  • 配置未生效: 检查 include 指令。如果你使用的是 Ubuntu 官方包,有时需要在 /etc/nginx/nginx.conf 中确认是否有 include /etc/nginx/sites-enabled/*; 这一行,并确保你在 sites-available 创建的链接到了 sites-enabled

通过以上步骤,你就可以在一台阿里云服务器上轻松管理多个独立的网站了。

云服务器