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