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