如何有条件地匹配nginx中的位置

我想设置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 ... ... } } 

使用这个configuration将/admin source设置$source_trusted = OK (通过地理模块)会产生一个404 ,而不是页面加载。

请记住,nginx通常只会计算一个location除非特别指示使用另一个位置,例如调用try_files的指定位置(您将这样做)。

所以当你点击^/admin位置时,你只需要做适当的事情。 在这种情况下,最有可能与您在location /使用的try_files完全相同。

  location ~ ^/admin { if ($source_trusted = "UNKNOWN") { return 403; } try_files $uri @rewriteapp; }