是否可以匹配具有首选前缀的多个路径?

问题描述 投票:0回答:1

我有两个位置“/mysite/india”和“/mysite/usa”共享相同的定义。我知道我可以使用正则表达式来指定它(没有 ^)。我不想使用它,因为这是一个非常频繁命中的端点。另一种方法是用两个精确匹配项(/mysite/usa 和 /mysite/india)复制整个块。我想知道是否有办法使用“首选前缀”来代替?我尝试使用 https://nginx.viraptor.info/ 进行操作,但它不起作用。这个语法是错误的还是只是不支持?

server {
 listen       80;
 server_name  mydomain.com www.mydomain.com;
 access_log   logs/mydomain.access.log  main;
 
location ^~ /mysite(/usa|/india)$
{
  root    /var/www/virtual/big.server.com/htdocs;
  expires 30d;
 }

 location / {
  proxy_pass      http://127.0.0.1:8080;
 }
}
nginx nginx-reverse-proxy nginx-config nginx-location
1个回答
0
投票

位置块的

^~
修饰符基本上意味着“不检查正则表达式”,因此您不能对匹配部分使用正则表达式语法。

将多个路径与单个位置块匹配的唯一方法是使用正则表达式(使用

~
~*
)。

如果您主要关心性能,那么最好的选择是使用“=”修饰符,并为每个路径使用单独的块。请注意,这意味着完全匹配,而不是前缀匹配 - 因此 = /mysite/usa 不会匹配

.../mysite/usa/
.../mysite/usa/index.html
。如果您确实需要前缀匹配,那么性能最佳的选项将是
^~
修饰符(同样,使用单独的块)。
    

© www.soinside.com 2019 - 2024. All rights reserved.