我有两个位置“/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;
}
}
位置块的
^~
修饰符基本上意味着“不检查正则表达式”,因此您不能对匹配部分使用正则表达式语法。
将多个路径与单个位置块匹配的唯一方法是使用正则表达式(使用
~
或 ~*
)。
如果您主要关心性能,那么最好的选择是使用“=”修饰符,并为每个路径使用单独的块。请注意,这意味着完全匹配,而不是前缀匹配 - 因此 = /mysite/usa
不会匹配
.../mysite/usa/
或 .../mysite/usa/index.html
。如果您确实需要前缀匹配,那么性能最佳的选项将是 ^~
修饰符(同样,使用单独的块)。