![反向代理连接到站点,但使用错误的 IP 地址进行文件请求](https://linux22.com/image/784622/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%BF%9E%E6%8E%A5%E5%88%B0%E7%AB%99%E7%82%B9%EF%BC%8C%E4%BD%86%E4%BD%BF%E7%94%A8%E9%94%99%E8%AF%AF%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%E8%BF%9B%E8%A1%8C%E6%96%87%E4%BB%B6%E8%AF%B7%E6%B1%82.png)
我正在尝试在两台服务器之间建立连接,以便当访问一台服务器时,客户端会被代理到第二台服务器。
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 的服务器上寻找文件。
这是使用错误 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 应用程序本身并修复所有此类路径。