Правило Nginx, ограничивающее отображение конкретной страницы только на частном IP

Я использую keycloak, и он работает на общедоступных ip и консоли администратора, также доступных через общедоступный ip, и использую веб-сервер nginx. У меня есть требование, чтобы консоль администратора была доступна только на частном IP. Другие URL должны нормально работать на публичных IP / доменных именах.

Теперь Ex: имя_домена / auth и имя_домена / auth / realm / admin и другие URL-адреса доступны публично.

Требование: только эта административная консоль domanin_name / auth / realm / admin url должна быть доступна только через частный 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 {
        ...
    }
}
...

Надеюсь, это поможет.

Другие вопросы по тегам