Прокси-сервер Nginx: запретить все, кроме вложенного пути

Я пытаюсь настроить прокси Nginx для приложения узла, которое в настоящее время находится под разработка.

Я пытаюсь разрешить доступ к основному сайту только IP-адресам из белого списка, но у меня есть путь / api, который я хотел бы сделать доступным с любого IP-адреса.

I ' Мы пробовали определять блок местоположения в разном порядке, вложенный и т. д., но без кубиков, в настоящее время кажется, что он не передает никаких запросов к / api на прокси.

upstream node_upstream {
    server 127.0.0.1:3000 fail_timeout=0;
}

server {
     listen 80;
     listen [::]:80;
     server_name example.com;

     location /api {
         allow all;
     }

     location / {
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_redirect off;
         proxy_buffering off;
         proxy_pass http://node_upstream;
         allow 1.2.3.4;
         deny all;
     }

     location /public {
         root /path/to/static/files;
     }

     listen 443 ssl;
     ... SSL Config here...

     if ($scheme != "https") {
         return 301 https://$host$request_uri;
     }
}
2
задан 13 July 2017 в 12:49
1 ответ

Исправлено по совету из комментария Ричарда.

Nginx соответствует только одному блоку местоположения, поэтому я переместил заголовки, которые должны быть определены на сервере, и установил proxy_pass с соответствующим разрешением, запретить на путях к

server {
    listen 80;
    listen [::]:80;

    server_name example.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    proxy_buffering off;

    location /api {
        proxy_pass http://node_upstream;
        allow all;
    }

    location / {
        proxy_pass http://node_upstream;
        allow 1.2.3.4;
        deny all;
    }
    ...
}
2
ответ дан 3 December 2019 в 11:28

Теги

Похожие вопросы