具有不同子域的 Nginx 反向代理,配置文件不起作用

具有不同子域的 Nginx 反向代理,配置文件不起作用

我有一个涉及以下域的设置:

  • 网站
  • 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_headerHost请求标头从传递98.76.54.3212.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;
    }
}

相关内容