在Nginx中配置多个网站的反向代理并保持URL不变,可以通过为每个网站设置独立的 server
块,然后在每个 server
块中使用 proxy_pass
指令,将请求转发到相应的后端服务器。以下是具体的配置步骤:
- 编辑 Nginx 配置文件:通常在
/etc/nginx/nginx.conf
或/etc/nginx/conf.d/
中创建新的配置文件,例如multi_site.conf
。 - 添加多个
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.com
和 http://example2.com
时,Nginx 会自动将请求转发到对应的后端服务器并保持 URL 不变。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。