nginx 针对 / 和 /* 的不同路由

nginx 针对 / 和 /* 的不同路由

我想要路由/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 / { … }将适用于其余页面。

精确匹配(带有等号)优先于前缀定位(无等号)。

相关内容