Rulez un serviciu pe un container docker.
Serviciul este expus pe un anumit port (de ex. 12345).
Pe deasupra am adăugat un proxy invers nginx pentru a obține funcționalități suplimentare precum HTTPS și HTTP/2.
configurația nginx este următoarea:
worker_proceses auto;
http {
sendfile activat;
gzip on;
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl ipv6only=on http2;
server_name example.com
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
Locație / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Gazdă $gazdă;
proxy_pass http://localhost:12345/;
proxy_buffering dezactivat;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
}
}
}
Fără firewall, funcționează corect (pot accesa serviciul pe LAN atât pe portul 443, cât și pe portul 12345).
Am firewalld cu backend nftables configurat după cum urmează:
docker (activ)
tinta: ACCEPT
icmp-block-inversion: nu
interfețe: br-06ceff0ffa49 docker0
surse:
Servicii:
porturi: 12345/tcp 12345/udp
protocoale:
înainte: da
mascarada: nu
porturi înainte:
porturi sursă:
icmp-blocks:
reguli bogate:
public (activ)
target: implicit
icmp-block-inversion: nu
interfețe: eth0 wlan0
surse:
servicii: http https ssh
porturi: 12345/tcp
protocoale:
înainte: da
mascarada: nu
porturi înainte:
porturi sursă:
icmp-blocks:
reguli bogate:
de încredere (activ)
tinta: ACCEPT
icmp-block-inversion: nu
interfețe: ia
surse:
Servicii:
porturi: 12345/tcp
protocoale:
înainte: da
mascarada: nu
porturi înainte:
porturi sursă:
icmp-blocks:
reguli bogate:
Când încerc să accesez serviciul de pe un PC pe LAN cu această configurație, îl pot accesa direct prin portul 12345, dar dacă încerc să îl accesez prin nginx primesc un timeout.
Sentimentul meu este că firewalld împiedică nginx să facă schimb de date cu containerul, dar nu am idee ce îmi lipsește pentru ca acesta să funcționeze.
Ce pot să-mi lipsească?