在Nginx中配置多个网站的反向代理并保持URL不变,可以通过为每个网站设置独立的 server 块,然后在每个 server 块中使用 proxy_pass 指令,将请求转发到相应的后端服务器。以下是具体的配置步骤:

  1. 编辑 Nginx 配置文件:通常在 /etc/nginx/nginx.conf/etc/nginx/conf.d/ 中创建新的配置文件,例如 multi_site.conf
  2. 添加多个 server:为每个域名(或者子域名)添加一个 server 块,配置 proxy_pass 指向各自的后端服务器。

示例配置

假设有两个网站:

  • 网站 1 的域名为 example1.com,后端服务器为 http://localhost:3001
  • 网站 2 的域名为 example2.com,后端服务器为 http://localhost:3002

配置文件可以如下设置:

# 配置网站 1
server {
    listen 80;
    server_name example1.com;

    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# 配置网站 2
server {
    listen 80;
    server_name example2.com;

    location / {
        proxy_pass http://localhost:3002;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

解释

  • listen 80:监听 HTTP 80 端口。
  • server_name:指定每个网站的域名。
  • proxy_pass:定义后端服务器的地址。
  • proxy_set_header:确保请求头中的原始客户端信息被传递到后端服务器,例如客户端的真实 IP 地址、协议等。

启用 HTTPS

如果需要 HTTPS,可以为每个 server 块添加 SSL 配置:

server {
    listen 443 ssl;
    server_name example1.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/certificate.key;

    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

保存并重启 Nginx

sudo nginx -t   # 检查配置是否正确
sudo systemctl restart nginx   # 重启Nginx服务

这样设置后,访问 http://example1.comhttp://example2.com 时,Nginx 会自动将请求转发到对应的后端服务器并保持 URL 不变。


正直的罐头
1 声望0 粉丝