使用 ProxyPass 配置 Nginx 过滤的正确方法

使用 ProxyPass 配置 Nginx 过滤的正确方法

我正在使用 Nginx 将代理传递到由 Circus 提供的 wsgi 应用程序。

我只想允许某些 IP 地址的某些 URL 访问该应用程序。

现在它看起来像这样:

server {
    listen   80;
    server_name  service.dev;
    access_log  /var/log/service.access.log;
    error_log  /var/log/service.error.log debug;

    location / {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass         http://127.0.0.1:9000/;
    }

    location /admin/ {
        allow 192.168.5.0/24;
        deny all;
    }
}

但它不起作用。如果我有权限,我会收到 404 错误,而不是 proxy_pass。

您知道怎样才能做到这一点而不必每次都复制/粘贴 proxy_pass 配置吗?

谢谢。

答案1

编辑2

根据 VBart 的评论,我将 中的条目更改try_files$uri @proxy_to_app。这避免了命名位置顺序的任何混淆(它们必须始终排在最后)。请注意,如果目录/admin/在本地存在,则将使用它而不是代理。

编辑

如果你真的想要使用命名位置以避免proxy_pass每个位置重复,您可以使用以下命令:

server {
    listen       80;
    server_name  service.dev;
    access_log   /var/log/service.access.log;
    error_log    /var/log/service.error.log debug;

    location / { 
        # Catch all 
        try_files $uri @proxy_to_app;
    }   

    location /admin/ {
        # /admin/ only
        allow 192.168.5.0/24;
        deny  all;
        try_files $uri @proxy_to_app;
    }   

    location @proxy_to_app {
        proxy_set_header  Host $http_host;
        proxy_redirect    off;
        proxy_pass        http://127.0.0.1:9000;
    }   
}

这有点像黑客行为,try_files至少需要两个参数,首先它会寻找具有相同的本地路径$uri(如果您想用本地文件覆盖)。在第二个实例中,我将其指定/dev/null为第二条路径;这将永远不会被使用。

原来的

尝试以下配置:

server {
    listen       80;
    server_name  service.dev;
    access_log   /var/log/service.access.log;
    error_log    /var/log/service.error.log debug;

    # Proxy settings
    proxy_set_header   Host $http_host;
    proxy_redirect     off;

    location / {
        # Catch all
        proxy_pass     http://127.0.0.1:9000/;
    }

    location /admin/ {
        # /admin/ only
        allow 192.168.5.0/24;
        deny  all;
        proxy_pass     http://127.0.0.1:9000/;
    }
}

location /块应该只捕获随后在其他位置块中未匹配的 URI。

相关内容