NGINX的proxy_pass或proxy_redirect

33

需要在Nginx中使用 proxy_pass 进行帮助。

从外部访问 Nginx 的 URL 将会像这样: http://some-IP:8080/v2/platform/general/activity/plan?.....

我的下游服务看起来像这样: http://another-IP:8080/activity/plan?...

我想要从原始公共 URL 中去掉

/v2/platform/general

并像上面那样调用我的下游服务。

在 Nginx 中,我应该如何将公共访问 URL 重定向到下游服务?

我尝试了这个:

location /v2/platform/general/ {
  rewrite ^/(.*) /$1 break;
  proxy_redirect off;
  proxy_pass http://another-IP:8080;
  proxy_set_header Host $host;

但是它没有起作用,任何帮助将不胜感激。

1个回答

42

proxy_passproxy_redirect的作用完全不同。 proxy_redirect指令只涉及在3xx状态消息中更改响应头。有关详细信息,请参见NGINX proxy_redirect文档

您的rewrite语句除了防止进一步修改URI之外没有任何作用。否则,此行将阻止proxy_pass映射URI。请参见下面。

proxy_pass指令可以通过将URI值附加到proxy_pass值来映射URI(例如从/v2/platform/general/foo映射到/foo),该指令与location值一起使用。有关详细信息,请参见本文档

例如:

location /v2/platform/general/ {
    ...
    proxy_pass http://another-IP:8080/;
}

如果你的上游服务器对于值another-IP:8080没有正确响应,那么你可能需要设置Host头。

如果你的上游服务器生成带有错误值的Location标头值的3xx状态响应,则可能需要添加一个或多个proxy_redirect语句。


太好了!!这刚刚为我省下了额外的调试痛苦。 - Omebe Johnbosco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接