Nginx-在proxy_pass中添加变量时无限重载

问题描述 投票:2回答:1

我正在Docker上使用Nginx,我想将每个用户分配到不同的端口。

首先,不添加任何内容,我的代码运行正常:

    location  /viewer/ {
        proxy_pass http://xx.xxx.xxx.xxx:18080/Road/;
    }

按照预期,URL中的“ / viewer /”将代理到端口18080。

但是如果我将任何变量添加到proxy_pass中,如:

set $test 1;
proxy_pass http://xx.xxx.xxx.xxx:18080/Road/?$test;

然后,首先,静态文件不再加载,我必须添加如下代码:

    location ~ \.css {
       add_header  Content-Type    text/css;
    }
    location ~ \.js {
       add_header  Content-Type    application/x-javascript;
    }

此后,静态文件再次工作,但页面开始无限重装。

在我以为这是因为我用proxy_pass中的一个变量替换了端口,但是正如我向您展示的那样,当我在其中添加任何变量时会发生这种情况。

您认为我可能做错什么?谢谢您的帮助!

loops docker nginx static reload
1个回答
1
投票

proxy_pass添加变量会更改其行为。您将需要构造整个URI。

在您的原始配置中,URI /viewer/foo在通过上游之前已转换为/Road/foo

在您的新配置中,URI /viewer/foo被转换为/Road/?1,并且原始URI的尾部丢失了。

使用rewrite...break修改URI可能会更成功。

例如:

location  /viewer/ {
    rewrite ^/viewer(.*)$ /road$1?something break;
    proxy_pass http://xx.xxx.xxx.xxx:18080;
}

有关详细信息,请参见this document


根据您的评论,您希望更改目标端口。

例如:

location  /viewer/ {
    rewrite ^/viewer(.*)$ /road$1 break;
    proxy_pass http://xx.xxx.xxx.xxx:$myport;
}

如果按名称指定上游服务器,则需要定义resolver。有关详情,请参见this document

© www.soinside.com 2019 - 2024. All rights reserved.