我正在尝试在两台服务器之间建立连接,以便当访问一台服务器时,客户端会被代理到第二台服务器。
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 应用程序本身并修复所有此类路径。