Я пытаюсь настроить прокси Nginx для приложения узла, которое в настоящее время находится в разработке.
Я пытаюсь разрешить доступ к основному сайту только IP-адресам из белого списка, но у меня есть путь / api, который должен быть доступен с любого IP-адреса.
Я пробовал определять блок местоположения в разных порядках, вложенных и т. Д., Но без кубиков, в настоящее время он, похоже, не передает никаких запросов в / 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;
}
}
Исправлено по совету из комментария Ричарда.
Nginx соответствует только одному блоку местоположения, поэтому я переместил заголовки, которые должны быть определены на сервере, и установил proxy_pass с соответствующим allow, deny на путях для проксирования.
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;
}
...
}