反向代理连接到站点,但使用错误的 IP 地址进行文件请求

反向代理连接到站点,但使用错误的 IP 地址进行文件请求

我正在尝试在两台服务器之间建立连接,以便当访问一台服务器时,客户端会被代理到第二台服务器。

http {

        upstream serverConn {
                server <my.server.ip>;
        }

        server {
        listen 80 default_server;

        root /usr/share/nginx/html;

                location /test {
                        proxy_pass http://serverConn/;
                        proxy_set_header Host $upstream_addr;
                        proxy_set_header X-Forwarded-For $remote_addr;
                        proxy_set_header X-Forwarded-Host $http_host;
                }
        }
}

当客户端访问服务器时,它应该将它们代理到 <my.server.ip>,但是网页上发出的所有 get 请求都在托管 nginx 的服务器上寻找文件。

触发错误的 URL

这是使用错误 IP 发出的请求的图片,它应该是 <my.server.ip>,而不是 nginx 服务器 10.XXX.XX.X。有什么解决办法吗?我尝试了 set_header 的多种变体,但都无济于事。

答案1

“它应该将它们代理到 <my.server.ip>”通常不正确。现代 Web 应用程序必须以能够很好地与反向代理配合使用的方式编写,但许多应用程序却并非如此。

href="static/some.css"在您的情况下,和之间的差异href="/static/some.css"非常重要,并且后者不适用于您的代理设置。

在第一个示例中,static/some.css是指定 CSS 文件相对于 HTML 文件位置的相对路径。这意味着,如果您的 HTML 文件位于名为 mywebsite 的目录中,则 CSS 文件应位于 mywebsite 目录中名为 static 的子目录中。

相比之下,/static/some.css是一个绝对路径,指定 CSS 文件相对于您网站根目录的位置。这意味着无论您的 HTML 文件位于您网站目录结构的哪个位置,它都会始终在网站根目录中寻找静态子目录来查找 CSS 文件。

因此,要解决该问题,您应该返回 Web 应用程序本身并修复所有此类路径。

相关内容