我们有两台服务器,A 和 B。服务器 A 可在全局范围内访问。他安装了nginx。这就是我在conf中的内容:
location /test {
proxy_pass http://localserver.com;
}
应该做的,就是翻译地址 http://globalserver.com/test (即服务器A)到内部服务器地址 http://localserver.com .但是,它确实附加了位置路径,即尝试查找 http://localserver.com/test ,根本不可用。如何让代理传递到正确的地址,丢弃该位置的最后一部分?
请您参考如下方法:
那应该工作。 Nginx 应该去除上游本地服务器上的“/test”路径。所以我只能说这不是原因。为了让它更好一点,试试这个:
location /test/ {
proxy_pass http://localserver.com/;
}
例如,我在前 2 行添加的 2 个斜杠将避免错误地匹配 '/testABC' 并将错误的请求发送到上游本地服务器。
你有没有
proxy_redirect
在同一位置块中的行?如果您的上游本地服务器有重定向,那么该行上的错误将导致您描述的问题。
[ 更新 ] 找到了原始配置不起作用而我的工作正常的根本原因:如果 proxy_pass 指令本身没有 URI 路径,则 nginx 不会替换 URI 路径部分。因此,我在末尾添加斜杠(斜杠被视为 URI 路径)的修复会触发 URI 路径替换。
引用: http://wiki.nginx.org/HttpProxyModule#proxy_pass
If it is necessary to transmit URI in the unprocessed form then directive proxy_pass should be used without URI part
location /some/path/ { proxy_pass http://127.0.0.1; }