nginx反向代理重写位置

好的,所以我有一个虚拟机http://10.0.8.247:80/phppgadmin/运行phppgadmin。 我想在admin.example.com上公开phppgadmin到互联网,所以我做了

server { listen 80; server_name admin.example.com; location / { proxy_pass http://10.0.8.247:80/; } } 

这和预期的一样。 去admin.example.com/phppgadmin将请求代理到10.0.8.247,我得到我想要的响应。 现在,我想要改变一点:在admin.example.com/postgres上有相同的回应。 所以我试了

 server { listen 80; server_name admin.example.com; location /postgres/ { proxy_pass http://10.0.8.247:80/phppgadmin/; } } 

但是这一直让我失望。 浏览器表明它试图连接到10.0.8.247,这自然不会工作,因为我不直接将虚拟机公开到互联网。 任何人都有提示? 在此先感谢,体育

======================================

解决scheme浮现(感谢lot,cnst!)

 server { listen 80; server_name admin.example.com; location /postgres/ { proxy_pass http://10.0.8.247:80/phppgadmin/; proxy_redirect default; } } 

像魅力一样工作。 另请注意

 proxy_redirect default; 

是一样的

 proxy_redirect http://10.0.8.247:80/phppgadmin/ /postgres/; 

您遇到的问题通过proxy_redirect指令进行控制。

如果你的configuration和描述完全一样,那么这意味着nginx不会自动正常化:80 proxy_pass :80部分让proxy_redirect正常工作(这不会让我感到吃惊,因为大多数人不需要对端口80进行proxy_pass反正),在这种情况下,您可以尝试删除:80 ,或添加显式的proxy_redirect指令。

否则,如果您在locationproxy_pass指令中使用正则expression式或variables,则不要,或者只是添加显式的proxy_redirect