Nastavenie portov pre Docker na rev. proxy

Nastavenie portov pre Docker na rev. proxy
« kdy: 27. 12. 2023, 07:03:36 »
Prevadzkujem domaci rev. proxy nginx, kde mam okrem ineho verejnu domenu (priklad) example.com a knej riesim subdomeny 1.example.com, 2.example.com atd.
Sudbomeny uz nie su verejne, ale privatne (a zdielaju * wildcard cert LE). Mam takto vyriesenych asi 4-5 subdomeny a funguje to dobre. Zapis pre jednu subdomeny v nginix konfiguraku vyzera nasledovne

Kód: [Vybrat]
server {
    server_name 1.example.com;

    location / {
        proxy_pass http://192.168.1.105;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }


    listen 443 ssl;
    listen 443 quic;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/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


    add_header Alt-Svc 'h3=":$server_port"; ma=86400';
    add_header x-quic 'h3';
    add_header Alt-Svc 'h3-29=":$server_port"';
}

server {
    if ($host = 1.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name 1.example.com;
    return 404; # managed by Certbot


}

Trocha som sa zacal pohravat s dockerom a rad  by som pouzil pre docker aplikacie tiez privatne subdomeny, ale aby boli porty aplikacii namapovane na port 80 (vsetky). Napr. instalujem docker portainer

Kód: [Vybrat]
sudo docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latestAk chcem aby bezal na porte 80, tak zmenim port
Kód: [Vybrat]
sudo docker run -d -p 8000:8000 -p 80:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latestA je to vybavene. Ak ale spustim dalsi docker, ktory bezi na porte
Kód: [Vybrat]
-p 5000:5000tak uz to nemozeme zmenit na 80:5000, pretoze na tom porte uz pocuva portainer. Chcel som to teda riesit priamo na rev. proxy, nastavenim portu v proxy_pass ale toto tiez nefunguje.

Kód: [Vybrat]
server {
    server_name 1.example.com;

    location / {
        proxy_pass http://192.168.1.105:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }


    listen 443 ssl;
    listen 443 quic;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/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


    add_header Alt-Svc 'h3=":$server_port"; ma=86400';
    add_header x-quic 'h3';
    add_header Alt-Svc 'h3-29=":$server_port"';
}

server {
    if ($host = 1.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name 1.example.com;
    return 404; # managed by Certbot


}

Ako by som to mohol vyriesit ?
thx
« Poslední změna: 27. 12. 2023, 09:46:47 od Petr Krčmář »


Re:Nastavenie portov pre docker na rev. proxy
« Odpověď #1 kdy: 27. 12. 2023, 09:34:28 »
Při mapování portů z Dockeru určíte, na jaký port se má interní port namapovat. Tento port pak použijete v nginxu. Doporučuju naví stanovit, že mapování portu v Dockeru se má provádět jen na localhost, aby pod tím vysokým portem nebyla ta aplikace dostupná přímo.

Takže Docker kontejner spustíte

Kód: [Vybrat]
docker run -p 127.0.0.1:5000:8000 …
A v nginxu pak nakonfigurujete

Kód: [Vybrat]
proxy_pass 127.0.0.1:5000

Re:Nastavenie portov pre Docker na rev. proxy
« Odpověď #2 kdy: 27. 12. 2023, 10:32:32 »
https://hub.docker.com/r/nginxproxy/nginx-proxy
automaticky bez potreby neco nekde zkoumat.
Děkuji za možnost editace příspěvku.

Re:Nastavenie portov pre Docker na rev. proxy
« Odpověď #3 kdy: 27. 12. 2023, 11:56:48 »
Naprosto geniální https://nginxproxymanager.com/

Re:Nastavenie portov pre docker na rev. proxy
« Odpověď #4 kdy: 27. 12. 2023, 13:34:09 »
Při mapování portů z Dockeru určíte, na jaký port se má interní port namapovat. Tento port pak použijete v nginxu. Doporučuju naví stanovit, že mapování portu v Dockeru se má provádět jen na localhost, aby pod tím vysokým portem nebyla ta aplikace dostupná přímo.

Takže Docker kontejner spustíte

Kód: [Vybrat]
docker run -p 127.0.0.1:5000:8000 …
A v nginxu pak nakonfigurujete

Kód: [Vybrat]
proxy_pass 127.0.0.1:5000
Neviem ci si rozumieme.
Dockery bezia na servery s IP adresou 192.168.1.105.
Nginx rev. proxy  bezi na IP 192.168.1.110
Ak spustim docker (napr. portainer) s takym portom ako  je v navode pre http 9000:9000, tak v prehliadaci to funguje takto
Kód: [Vybrat]
192.168.1.105:9000Ak docker spustim s parametrom 80:9000, tak v prehliadaci staci zadat
Kód: [Vybrat]
192.168.1.105Ked chcem spustit iny docker, ktory funguje napr. na porte 5000:5000, tak uz nemozem pouzit 80:5000, lebo na porte 80 uz pocuva portainer.
Myslel som si, ze ked docker(y) necham na standardnych portoch 9000:9000 a 5000:5000 a do konfiguraku rev. proxy servera pridam pre kazdy docker

Kód: [Vybrat]
proxy_pass http://192.168.1.105:9000;
proxy_pass http://192.168.1.105:5000;
tak ze to bude fungovat, ale nefunguje to.


Re:Nastavenie portov pre docker na rev. proxy
« Odpověď #5 kdy: 27. 12. 2023, 16:37:43 »
Myslel som si, ze ked docker(y) necham na standardnych portoch 9000:9000 a 5000:5000 a do konfiguraku rev. proxy servera pridam pre kazdy docker

Kód: [Vybrat]
proxy_pass http://192.168.1.105:9000;
proxy_pass http://192.168.1.105:5000;
tak ze to bude fungovat, ale nefunguje to.
Ano, takto to bude fungovat.

Pokud vám to nefunguje, podívejte se do logu nginxe, co tam hlásí za chybu. Na zařízení,kde běží Docker kontejnery, zkontrolujte pomocí ss -nltp, zda na těch portech (ty, co jsou vystavené ven, tj. na které směřujete provoz z niginxu) opravdu něco naslouchá. Pokud ano a komunikace stejně nefunguje, pak jí zřejmě blokuje nějaký firewall – na zařízení z nginxem, na zařízení s Docker kontejnery nebo v síti mezi nimi.

Re:Nastavenie portov pre Docker na rev. proxy
« Odpověď #6 kdy: 27. 12. 2023, 17:38:15 »
Mal si pravdu, funguje to. Problem bol vo firewalle. Bolo mi to divne, lebo ked nieco testujem, tak firewall nikde neaktivujem. Avsak nginx mam v DMZ a na pfsense mam aliasy pre konkretne IP a porty (cize stacilo tieto porty doplnit v alias).
Moja nepozornost.
Dakujem