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

jchrr9hc  于 2024-01-06  发布在  Nginx
关注(0)|答案(1)|浏览(198)

我有两个位置'/mysite/india'和'/mysite/usa'共享相同的定义。(没有**^**)。我不想使用,因为这是一个非常频繁的命中端点。另一种方法是复制整个块与两个完全匹配(/mysite/usa and /mysite/india).我想知道是否有一种方法可以使用'preferred prefix'代替?我尝试使用https://nginx.viraptor.info/进行跟踪,但它不工作。是语法错误还是不支持?

  1. server {
  2. listen 80;
  3. server_name mydomain.com www.mydomain.com;
  4. access_log logs/mydomain.access.log main;
  5. location ^~ /mysite(/usa|/india)$
  6. {
  7. root /var/www/virtual/big.server.com/htdocs;
  8. expires 30d;
  9. }
  10. location / {
  11. proxy_pass http://127.0.0.1:8080;
  12. }
  13. }

字符串

iyzzxitl

iyzzxitl1#

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

相关问题