好的,我有一个虚拟机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,这自然不会成功,因为我不会将虚拟机直接暴露在互联网上。有人能给点提示吗?提前谢谢,P。
======================================
解决方案流(非常感谢,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/;
答案1
您遇到的问题可以通过proxy_redirect
指示。
如果您的配置与描述的完全一致,则意味着 nginx 不会自动规范化:80
部分proxy_pass
以使其proxy_redirect
正常工作(这不会让我太惊讶,因为大多数人不会将 proxy_pass 传递到端口 80),在这种情况下,您可以尝试删除:80
或添加明确的proxy_redirect
指令。
location
否则,如果您在或指令中使用正则表达式或变量proxy_pass
,那么就不要使用,或者proxy_redirect
也只需添加一个明确的,。