Loops Nginx-在代理过程中添加变量时无限重载

Loops Nginx-在代理过程中添加变量时无限重载,loops,docker,nginx,static,reload,Loops,Docker,Nginx,Static,Reload,我正在Docker上使用Nginx,我希望将每个用户分配到不同的端口 首先,在不添加任何内容的情况下,我的代码运行良好: location /viewer/ { proxy_pass http://xx.xxx.xxx.xxx:18080/Road/; } 正如预期的那样,转到URL中的“/viewer/”将代理端口18080 但是如果我在代理过程中添加任何变量,比如: set $test 1; proxy_pass http://xx.xxx.xxx.xxx

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

首先,在不添加任何内容的情况下,我的代码运行良好:

    location  /viewer/ {
        proxy_pass http://xx.xxx.xxx.xxx:18080/Road/;
    }
正如预期的那样,转到URL中的“/viewer/”将代理端口18080

但是如果我在代理过程中添加任何变量,比如:

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中用一个变量替换了端口,但正如我向您展示的,当我在那里添加任何变量时,就会发生这种情况

你认为我会做错什么?
谢谢你的帮助

将变量添加到代理过程中会改变其行为。您将需要构造整个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;
}
location  /viewer/ {
    rewrite ^/viewer(.*)$ /road$1 break;
    proxy_pass http://xx.xxx.xxx.xxx:$myport;
}
有关详细信息,请参阅


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

例如:

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

如果按IP地址指定上游服务器,则不需要
解析器
语句。但是,如果按名称指定上游,则需要定义一个
解析器
。有关详细信息,请参阅

您使用主机头吗?再见。我以前看过这篇文章,但我没有在这个位置使用主机头你好,谢谢你的回答。这与我在上面使用的示例变量$test配合得很好。但是如果我想用一个变量替换端口,比如“$port”而不是“18080”,那么问题也是一样的。我仍然无法为每个用户代理一个端口。我认为proxy_pass仅仅通过添加一个变量来改变它的行为是非常奇怪的。。。