Configuration 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,然后将

我正在尝试使用基于URL的Nginx进行反向代理。我想要
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;
}