我想要路由/
到a.sock
和/(.*)
。b.sock
我试过
location / {
proxy_pass http://unix:/tmp/a.sock;
proxy_read_timeout 30;
proxy_connect_timeout 30;
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_set_header X-Forwarded-Proto $scheme;
}
location ~ /(.*) {
proxy_pass http://unix:/tmp/b.sock;
proxy_read_timeout 30;
proxy_connect_timeout 30;
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_set_header X-Forwarded-Proto $scheme;
}
顺序也不同。
这可以通过 nginx 实现吗?如果可以,如何实现?
我的看法是,根据文档,任何以 结尾的内容都假定/
在 之后有一个通配符,/
并且没有正则表达式的普通路线优先。
本质上,后端有一个或b.sock
的路由定义(具体取决于您使用的路由库),但没有 的处理程序。您可能在想“所以添加一个 的处理程序,然后就完事了”。我可能会这么做,但这是一种解决方法。我想处理。/:term
/{term}
/
/
a.sock
/
那么,这可以用 nginx 来实现吗?如何实现?
答案1
对主页使用精确匹配,例如location = / { … }
。location / { … }
将适用于其余页面。
精确匹配(带有等号)优先于前缀定位(无等号)。