Я запускаю службу в док-контейнере.
Служба предоставляется на заданном порту (например, 12345).
Кроме того, я добавил обратный прокси-сервер nginx, чтобы получить дополнительные функции, такие как HTTPS и HTTP/2.
Конфигурация nginx следующая:
рабочие_процессы авто;
http {
отправить файл включен;
gzip включен;
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl ipv6only=on http2;
server_name example.com
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
место расположения / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Хост $host;
прокси_пароль http://localhost:12345/;
прокси_буферизация выключена;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "обновление";
}
}
}
Без брандмауэра работает нормально (могу получить доступ к сервису по локальной сети как по порту 443, так и по порту 12345).
У меня есть firewalld с серверной частью nftables, настроенной следующим образом:
докер (активный)
цель: ПРИНЯТЬ
icmp-инверсия блока: нет
интерфейсы: br-06ceff0ffa49 докер0
источники:
Сервисы:
порты: 12345/tcp 12345/udp
протоколы:
вперед: да
маскарад: нет
форвард-порты:
исходные порты:
icmp-блоки:
богатые правила:
публичный (активный)
цель: по умолчанию
icmp-инверсия блока: нет
интерфейсы: eth0 wlan0
источники:
сервисы: http https ssh
порты: 12345/TCP
протоколы:
вперед: да
маскарад: нет
форвард-порты:
исходные порты:
icmp-блоки:
богатые правила:
доверенный (активный)
цель: ПРИНЯТЬ
icmp-инверсия блока: нет
интерфейсы: вот
источники:
Сервисы:
порты: 12345/TCP
протоколы:
вперед: да
маскарад: нет
форвард-порты:
исходные порты:
icmp-блоки:
богатые правила:
Когда я пытаюсь получить доступ к сервису с ПК в локальной сети с этой конфигурацией, я могу получить к нему доступ напрямую через порт 12345, но если я попытаюсь получить доступ к нему через nginx, я получу тайм-аут.
Мне кажется, что firewalld не позволяет nginx обмениваться данными с контейнером, но я понятия не имею, чего мне не хватает, чтобы заставить его работать.
Что я могу упустить?