28

我们有两台服务器,A 和 B。服务器 A 可在全球范围内访问。他安装了nginx。这就是我在conf中的内容:

location /test {
  proxy_pass http://localserver.com;
}

它应该做的是将地址http://globalserver.com/test(即服务器 A)转换为内部服务器地址http://localserver.com。但是,它确实附加了位置路径,即尝试查找http://localserver.com/test,这根本不可用。如何使代理传递到正确的地址,丢弃该位置的最后一部分?

4

3 回答 3

52

那应该行得通。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

如果需要以未处理的形式传输 URI,则应使用指令 proxy_pass 而不使用 URI 部分

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}
于 2013-03-14T12:36:35.917 回答
1

尝试按照此处指定的方式添加http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

      proxy_pass http://localserver.com/;
于 2013-03-12T10:57:14.637 回答
-1

尝试重写

location /test {
    rewrite ^ $scheme://$host/;
    proxy_pass http://localserver.com;
}

一些有用的链接...

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

http://wiki.nginx.org/Pitfalls

于 2013-03-14T07:40:44.530 回答