nginx:如何使重写(重定向)相对?(即不要弄乱端口号!



我目前正在使用nginx 1.9.11。 我遇到这样一种情况:我的应用程序通过负载均衡器从动态端口提供,但应用程序本身上的端口已设置。 看起来像这样

Port [4000-4999] on load balancer -> instances of nginx all on port 80

我需要将/myapp重定向到/myapp/而不会丢失端口信息。 但是我不知道应用程序级别的端口,因为应用程序是动态创建和销毁的!

这是我的重写规则的语法:

rewrite ^/myapp /myapp/

我得到的是:

http://example.com:4000/myapp  -> http://example.com/myapp   # no port 4000!

我无法对端口进行硬编码...因为有一千种可能性,而且它们一直在变化! 我需要留在同一个端口,但我不知道我们是在哪个端口进来的。 如何让 nginx 独自离开端口?


我已经尝试过的...

httpserverlocation部分中:

port_in_redirect off;

在"server"部分中:

proxy_set_header Host $host:$server_port;

同样在server部分也是如此:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;

经典。 经过两天的努力,我写了一篇不错的 Stack Overflow 帖子,紧接着我突然想到了一些事情,我尝试了一下,它有效。

以下是我解决问题的方法:我将重写规则更改为如下所示:

rewrite ^/myapp $http_host/myapp/

它奏效了!

最新更新