我正在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中的一个变量替换了端口,但是正如我向您展示的那样,当我在其中添加任何变量时会发生这种情况。
您认为我可能做错什么?谢谢您的帮助!
向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。