nginx 是否可以用首选前缀匹配多个路径?

jchrr9hc  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(73)

我有两个位置'/mysite/india'和'/mysite/usa'共享相同的定义。(没有**^**)。我不想使用,因为这是一个非常频繁的命中端点。另一种方法是复制整个块与两个完全匹配(/mysite/usa and /mysite/india).我想知道是否有一种方法可以使用'preferred prefix'代替?我尝试使用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;
 }
}

字符串

iyzzxitl

iyzzxitl1#

location块的^~修饰符基本上意味着“不检查正则表达式”,所以你不能对match部分使用正则表达式语法。
将多个路径与单个位置块匹配的唯一方法是使用正则表达式(使用~~*)。
如果您主要关心性能,那么最好的选择是使用“=”修饰符,每个路径都有单独的块。请注意,这意味着完全匹配,* 而不是 * 前缀匹配-因此= /mysite/usa不会匹配.../mysite/usa/.../mysite/usa/index.html。如果您确实需要前缀匹配,那么性能最好的选择是^~修饰符(同样,具有单独的块)。
理想情况下,您应该测试不同选项对服务器的性能影响-除非您有大量基于regex的位置块,否则您可能会发现性能影响微不足道,因此使用regex选项的维护优势是值得的。

相关问题