Fórum Root.cz
Hlavní témata => Server => Téma založeno: darebacik 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
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
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:latest
Ak chcem aby bezal na porte 80, tak zmenim port
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:latest
A je to vybavene. Ak ale spustim dalsi docker, ktory bezi na porte
-p 5000:5000
tak 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.
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
-
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
docker run -p 127.0.0.1:5000:8000 …
A v nginxu pak nakonfigurujete
proxy_pass 127.0.0.1:5000
-
https://hub.docker.com/r/nginxproxy/nginx-proxy
automaticky bez potreby neco nekde zkoumat.
-
Naprosto geniální https://nginxproxymanager.com/
-
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
docker run -p 127.0.0.1:5000:8000 …
A v nginxu pak nakonfigurujete
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 (https://docs.portainer.io/start/install-ce/server/docker/linux)) s takym portom ako je v navode pre http 9000:9000, tak v prehliadaci to funguje takto
192.168.1.105:9000
Ak docker spustim s parametrom 80:9000, tak v prehliadaci staci zadat
192.168.1.105
Ked 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
proxy_pass http://192.168.1.105:9000;
proxy_pass http://192.168.1.105:5000;
tak ze to bude fungovat, ale nefunguje to.
-
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
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.
-
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