В настоящее время я использую nginx в качестве прокси-сервера для нескольких docker контейнеров, работающих на разных хостах.
Каждый контейнер или пара контейнеров отображаются с помощью блока местоположения в файле виртуальных хостов, как это dev.conf
:
server {
server_name dev.mydomain.xyz
location / {
proxy_pass http://172.16.18.2:8080/dashboard
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
location /api {
proxy_pass http://172.16.18.2:5000/api
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
...
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dev.mydomain.xyz/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dev.mydomain.xyz/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = dev.mydomain.xyz) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name dev.mydomain.xyz;
listen 80;
return 404; # managed by Certbot
}
Что бы я ожидал от этой настройки, так это то, что если бы я запросил URL-адрес типа: https://dev.mydomain.xyz/aaaaaa
, это дало бы мне 404, но вместо этого происходит то, что это решение для блока root (первый блок location /
).
Чего я хочу достичь сейчас, из соображений безопасности и удобства использования - это блокировать / отклонять все запросы, которые были сделаны вышеупомянутым способом (местоположение блок отсутствует / не указан). Я видел этот вопрос: о похожей проблеме , но это не сработало, как я ожидал. Имейте в виду, что я использую несколько файлов виртуальных хостов, все они включены в nginx.conf
.
Пример:
Request to dev.mydomain.xyz/api is allowed and processed
Request to dev.mydomain.xyz/nothing is denied
Nginx - это версия nginx/1.14.2
, установленная в Debian 10 x64
бит. Дайте мне знать, если потребуется дополнительная информация. Заранее спасибо.
РЕДАКТИРОВАТЬ 1 Для ясности, под желаемыми запросами я имел в виду местоположение, которое я назначил для данного виртуального хоста (это конечные точки), из которых каждое из этих мест должно быть Прокси для другого контейнера. Например, запросы на /
должны go на container1
, запросы на /api
должны go на container2
и т. Д. c.