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ă?