我想设置 nginx 位置匹配,但只针对特定的源地址。不幸的是,如果我已经匹配了一个位置,但没有满足条件,我就无法转到下一个位置。有什么方法可以很好地解决这个问题?
server {
...
location / {
index app.php;
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}
...
location ~ ^/admin {
if ($source_trusted = "UNKNOWN") {
return 403;
}
}
...
location ~ ^/... {
fcgi_pass ...
...
}
}
/admin
使用此配置从设置的源(通过地理模块)转到,$source_trusted = OK
将导致404
而不是页面加载。
答案1
请记住,nginx 通常只评估一个,location
除非特别指示使用另一个,例如在调用命名位置时try_files
(您这样做)。
因此,当您到达该^/admin
位置时,您只需执行适当的操作。在这种情况下,它很可能try_files
与您在 中使用的完全相同location /
。
location ~ ^/admin {
if ($source_trusted = "UNKNOWN") {
return 403;
}
try_files $uri @rewriteapp;
}