nginx 反向代理重写位置

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,这自然不会成功,因为我不会将虚拟机直接暴露在互联网上。有人能给点提示吗?提前谢谢,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也只需添加一个明确的,。

相关内容