Nginx a různé možnosti využití

Nginx a různé možnosti využití
« kdy: 09. 06. 2022, 20:13:08 »
Zdravím,
předmluva: chápu, že by mě asi někdo za můj dotaz nejraději poslal na školení, upřímně rád bych ho i absolvoval, ale není čas, s nginxem si hraju čistě pro domácí účely a než se tím začnu zabývat nějak vážněji (pokud vůbec kdy, zatím je mým oborem něco jiného), rád bych o tom už aspoň něco drobet věděl.

K věci: vím, že třeba pro nginx se dá docela dobře zautomatizovat získávání Let's Encrypt certifikátů. Zajímá mě jedna věc (vlastně víc, ale popopřadě): umí nginx takovou věc, jako že server bude přebírat klasické nezabezpečené http stránky z nějakého lokálního od vnější sítě odděleného jednoduchého webu na nějakém jiném serveru a publikovat to pod vlastní doménou s vlastním certifikátem jako https? Vlastně jsem přesvědčen o tom, že by to šlo, jeden takový web už tu mám, ale myslím, že by takhle bral ten web odkudkoli i z internetu (ne že bych plánoval to dělat), spíš mě zajímá nějaké rychlé nakopnutí, jak to udělat třeba i tak, že na adrese mojevlastnidomena•cz/jedenweb bude web z jednoho serveru, na adrese moj…cz/druhyweb bude web z dalšího serveru …

Co mě taky zajímá, jestli si nginx touto formou poradí s tím, že nějaký lokální server má self-signed certifikát a prezentuje https web a nginx ho navenek bude prezentovat pod vlastním certifikátem (tedy že bude dělat klienta tomu internímu webu a obsah, v tu chvíli již dešifrovaný, bude prezentovat ven tak, jako by to byl jeho vlastní). Možná jsou to tak banální dotazy, které ani nikdo neklade, tak se mi na ně nedaří najít odpověď (a možná je to tím, že tu otázku neumím pro google správně zformulovat).

Poslední věc, co mě zajímá: uměl by nginx takto (to je to reverse proxy, že?) poslat do světa na libovolném portu libovolnou službu? Ne třeba jen web, ale klidně i ssh, ftp, já nevím, co ještě…? Zatím tohle řeším mikrotikem, jde mi o to, že nginx by to pravděpodobně lépe zvládl i s rozlišením jména, tzn. že jednasluzba•mojedomena•cz by vystavila jednu službu, dalsisluzba•mojed…cz další službu (pokaždé na separe portu, ale pořád pod jednou IP adresu, tedy ano, mám jednu veřejnou pevnou IP). Nebo to už chci moc? (ostatně mikrotiku bych pak stejně musel říct, ať to všechno posílá na server s nginxem).

S nginxem zkrátka začínám a jak postupně zjišťuju, co všechno umí, tak bych rád některé ty scénáře využil, protože mi to přijde jako elegantní řešení. Chybové stavy, kdy třetí strana bude offline, bych řešil až pak.
Díky.


alex6bbc

  • *****
  • 1 432
    • Zobrazit profil
    • E-mail
Re:Nginx a různé možnosti využití
« Odpověď #1 kdy: 09. 06. 2022, 20:53:19 »
ty prvni dotazy podle me budou vec spravne konfigurace nginx proxy.
vic me zaujalo pridani jinych protokolu, byl by treba udelat modul do nginxu, problem vidim
v tom, ze moduly dostavaji http request, ktery si nejak zpracuji a pak vygeneruji odpoved, takze
by se to asi muselo dost ohnout. ale mozna by to slo pouzit jako nejaky http proxy do jineho protokolu.

me zas napadla blbina, udelat webovku ne treba v php, ale primo v c/c++ jako modul natvrdo do nginxu,
sam by generoval vsecko co patri k webove strance html, css, js :-)

Re:Nginx a různé možnosti využití
« Odpověď #2 kdy: 09. 06. 2022, 21:08:27 »
Ano, tohle všechno je možné, je možné mít na backendu HTTP a vepředu HTTPS. Stejně tak backend může umět třeba jen IPv6 a běžet na divném portu a Nginx bude umět oba protokoly a bude poslouchat na jiných portech. Tohle je běžná věc, jmenuje se to HTTP proxy a naprosto normálně to používám.

S obecnými protokoly je to složitější, tam samozřejmě HTTP proxy nepomůže. Ale Nginx od verze 1.9.0 umí stream proxy, což dovoluje proxovat libovolný protokol vyšší vrstvy. Není možné pak do obsahu samozřejmě zasahovat tak podrobně jako u HTTP, ale dá se takhle protočit úplně cokoliv, včetně toho SSH.

Re:Nginx a různé možnosti využití
« Odpověď #3 kdy: 09. 06. 2022, 21:17:39 »
Ty první dva příklady jsou klasická HTTP reverzní proxy, nginx se takhle používá velmi často: https://nginx.org/en/docs/beginners_guide.html#proxy

Ten třetí případ záleží na protokolu. FTP se všemi možnostmi takhle neprotlačíte, protože nepoužívá jen jedno spojení. Ale třeba SSH by takhle tunelovat šlo: https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

Re:Nginx a různé možnosti využití
« Odpověď #4 kdy: 09. 06. 2022, 23:49:25 »
Ano, jde to. Tohle je jednoduchý mirror, origin http.

Kód: [Vybrat]
server {
        listen 80;
listen 443 ssl;
        server_name xxx.live;
ssl_certificate_key /etc/letsencrypt/ttt/privkey.pem;
ssl_certificate /etc/letsencrypt/ttt/fullchain.pem;


        proxy_set_header Host kam.casino;
proxy_set_header Accept-Encoding ""; #### MUZE POMOC
proxy_set_header Connection ""; #### MUZE POMOC
proxy_http_version 1.1; ### MUZE POMOC
client_max_body_size 60000000; #pro upload souboru napr.
include  /etc/letsencrypt/options-ssl-nginx.conf;

        location /   {
                proxy_pass http://255.181.2.0:80/;

if ($request_uri ~ neco1 ) { set $t  1; }
if ($request_uri ~ dalsi) { set $t  1; }
if ($request_uri ~ treti ) { set $t  1; }
if ($http_user_agent ~ secret) { set  $t 0; }
if ($t = 1) { return 403 ; }
}

if ($scheme != "https") {
return 301 https://$host$request_uri;
}

další hodící se volby :
proxy_redirect off

}
není problém udělat něco jako "diff" mirror, že děláš mirror pro původní web, ale definuješ si webroot a tam můžeš umístit vybrané  soubory, které Bila podle tvého gusta . Něco jako  selektivní úpravy vybraných souborů
Kód: [Vybrat]
location @mojeproxy {...}
index mujindx.html
try_files $uri $uri/index.html ndex.php @mojeproxy
root /var/web123

Myslím že teď je modernější zápis s direktivou upstream pro "reverzní proxy"

Na "neplatný" certifikát tam asi bude nějaká volba pro vypnutí kontroly certifikátu, ale to vařím z vody
« Poslední změna: 09. 06. 2022, 23:57:23 od lathe »