Nginx 规则限制特定页面仅在私有 IP 上呈现

Nginx 规则限制特定页面仅在私有 IP 上呈现

我使用 keycloak,它在公共 IP 上运行,管理控制台也可通过公共 IP 访问,我使用 nginx Web 服务器。我有一个要求,即管理控制台只能在私有 IP 上访问。其他 URL 应在公共 IP/域名上正常工作。

现在,例如:域名/auth域名/auth/领域/admin并且其他网址是可公开访问的。

要求:仅此管理控制台域名/auth/领域/adminurl 只能通过私有 IP 访问。

可以通过 nginx 规则来实现吗?

请任何人帮助我。

下面是我正在尝试的配置,但它没有按预期工作。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.

        rewrite ^/(.*) /$1 break;
        proxy_ignore_client_abort on;
        proxy_pass http://localhost:8880;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
    }

    location /auth/realms/master {
        allow 127.0.0.1;
        deny all;
        #try_files $uri $uri/ =404
    }
}

答案1

您可以使用多个服务器条目,并且allow正如deny您已经做的那样:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;

    location /auth/realm/admin {
        deny all;
        ...
    }
}

server {
    listen 80;
    server_name <your-private-ip>;

    location /auth/realm/admin {
        ...
    }
}
...

希望有所帮助。

相关内容