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

如何在 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 ...
        ...
    }
}

/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;
    }

相关内容