Configuration nginx反向代理:如何实现?
我正在尝试使用基于URL的Nginx进行反向代理。我想要Configuration nginx反向代理:如何实现?,configuration,nginx,reverse-proxy,Configuration,Nginx,Reverse Proxy,我正在尝试使用基于URL的Nginx进行反向代理。我想要http://mydomain.example.com/client1/...要重定向到http://127.0.0.1:8193/...。我试过很多方法,但都不管用。请注意,应用程序可以进行重定向。以下是我上一个解决方案的配置文件: 违约 instances.conf 当浏览器请求http://mydomain.example.com/client1/,Nginx应该设置一个名为instance的cookie,其值为client1,然后将
http://mydomain.example.com/client1/...
要重定向到http://127.0.0.1:8193/...
。我试过很多方法,但都不管用。请注意,应用程序可以进行重定向。以下是我上一个解决方案的配置文件:
违约
instances.conf
当浏览器请求http://mydomain.example.com/client1/
,Nginx应该设置一个名为instance
的cookie,其值为client1
,然后将流量重定向到相应的代理。对于后续查询,它应该使用此cookie进行重定向。我遇到的问题是它从未将$instance
变量设置为client1
。不要忘记应用程序不知道前缀/client1
你有什么想法吗?您知道更好的解决方案吗?用于获取cookie的正则表达式是错误的。我已将此更改为
"instance=([^;][^ ]+)(?:;|$)"
现在它可以工作了
编辑:这最终只是解决方案的一部分。我很抱歉。还有一个问题。请参阅下面我的评论。请参阅Nginx'
请注意,将/clientX附加到代理传递URI的末尾会从请求中删除该部分URI(我觉得这很合理,但可能不是您想要的)。这与您的问题无关,而是“代理连接超时”
“此指令为与上游服务器的连接指定超时。必须记住,此超时不能超过75秒。”我认为问题在于用于获取cookie值的正则表达式。我不是正则表达式专家。我从Nginx的文档文件中获取了这个。有人能验证这个吗?没有。。。它之所以有效,是因为我强制了一个值作为代理传递。但是现在,当我手动将cookie设置到Firefox中时,它就工作了!设置cookie时出现问题。为什么与此相关?服务器指令中不能包含proxy_pass。
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 60;
# Installation of language packs, etc. can take a long time
proxy_read_timeout 10800;
if ($instance = client1) {
proxy_pass http://127.0.0.1:8193;
}
if ($instance = client2) {
proxy_pass http://127.0.0.1:8194
}
...
"instance=([^;][^ ]+)(?:;|$)"
map $uri $proxy {
/client1 http://127.0.0.1:8193/client1;
/client2 http://127.0.0.1:8194/client2;
}
server {
server_name my.domain.com;
proxy_pass $proxy;
}