![Nnginx 在一个位置指令中将 URL 映射到 proxy_pass](https://linux22.com/image/697430/Nnginx%20%E5%9C%A8%E4%B8%80%E4%B8%AA%E4%BD%8D%E7%BD%AE%E6%8C%87%E4%BB%A4%E4%B8%AD%E5%B0%86%20URL%20%E6%98%A0%E5%B0%84%E5%88%B0%20proxy_pass.png)
我有多个节点 websocket,可通过与 UNIX 套接字路径匹配的 URL 访问。我不想重复位置指令,而是想要一个类似 URL 列表的东西,用作套接字名称。使用正则表达式不起作用,因为我需要套接字名称的路径。
目前我正在使用这个位置:
location /application1/
{
proxy_pass http://unix:/var/run/nodejs/application1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
目标是实现如下目标:
$list = [app1, app2, app3]; #list of possible names
location /$list/ #match all names in the list
{
proxy_pass http://unix:/var/run/nodejs/$list_matched; #use matched name
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
基本上,列表中的每个 URL 都应重定向到具有相同名称的套接字。
提前感谢你的帮助:)
答案1
location ~* /(<regexp>)/ {
proxy_pass http://unix:/var/run/nodejs/$1; #use matched name
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
答案2
您需要使用正则表达式。类似这样的方法应该可以,但您必须自己计算出正则表达式。有很多教程和正则表达式实验站点。
location ~ (app1|app2|app3)$ {