我有一个涉及以下域的设置:
- 网站
- abc.site.com
- xyz.site.com
以及以下两台服务器:
- 12.34.56.78
- 98.76.54.32
基本上,我试图按如下方式调整我的流量:CloudFlare -> 98.76.54.32 -> 12.34.56.78。因此,98 IP 充当反向代理,而 12 IP 充当目标/主服务器。
在 CloudFlare 上,我将所有这些域都指向反向代理服务器。反向代理正在运行此配置文件reverse-prox.conf
:
server {
listen 80;
server_tokens off;
location / {
proxy_pass http://12.34.56.78;
}
}
现在,在主服务器 12.34.56.78 上,我有以下配置文件:
abc.site.com
server {
listen 80;
listen [::]:80;
root /var/www/abc;
index index.php index.html index.htm index.nginx-debian.html;
server_name abc.site.com;
location / {
try_files $uri;
}
}
xyz.site.com
server {
listen 80;
listen [::]:80;
root /var/www/xyz;
index index.php index.html index.htm index.nginx-debian.html;
server_name xyz.site.com;
location / {
try_files $uri;
}
}
为了方便起见,我缩短了配置文件,但这就是它的要点。
它几乎完美无缺,但有一个问题。abc.site.com 工作正常,但 xyz.site.com 显示 /abc/ 文件夹而不是 /xyz/ 文件夹。不知道为什么会发生这种情况。在两个服务器上的 Nginx 配置中都没有默认配置。
那么,我该如何解决这个问题?为什么 abc.site.com 可以正常工作,但 xyz.site.com 显示的内容与 abc.site.com 相同(而不是其各自的 /xyz/ 内容)。
答案1
为什么 abc.site.com 可以正常工作,但 xyz.site.com 显示的内容与 abc.site.com 相同(而不是其各自的 /xyz/ 内容)。
使用proxy_set_header
将Host
请求标头从传递98.76.54.32
到12.34.56.78
。默认情况下,nginx 没有代理该Host
标头。
nginx 将Host
请求标头设置为$proxy_host
变量,即在您的proxy_pass
指示。
例如,在98.76.54.32
:
server { listen 80; server_tokens off; location / { proxy_set_header Host $host; proxy_pass http://12.34.56.78; } }