Poslednou dobou dosť často počujem o Nginx.... vie mi niekto vysvetliť čo to reálne je? Pozeral som sa na stránky a vôbec tomu nerozumiem, tvári sa to ako balancer, web server, nejaká reverse proxy a neviem čo všetko...
a pri tom ani netuším s čím sa to používa, ak programovací jazyk, atď... ani vlastne čo to reálne vlastne je.
keď programujem webstránky a webaplikácie, vždycky som to riešil cez node.js alebo golang alebo python alebo c/c++... v využil som nejaké PaaS, IaaS a/alebo aj K8s.
Pozeral som sa na mnoho technológií okolo, konkrétne ale u Nginx som nikdy nepochopil ako sa to používa. Nevyzerá to ani ako Apache ani ako nič čo poznám.
17. 6. 2020, 00:45 editováno autorem komentáře
Nginx je webový server, stejně jako třeba Apache. Umí ale spoustu dalších věcí, třeba být reverzní proxy (před skutečným serverem) nebo třeba univerzální TCP/UDP proxy server. Podrobně jsou všechny jeho funkce popsány na domovském webu.
Většina těch funkcí je přímo svázaná s webem, takže je to prostě velmi mocný webový server. Nginx toho prostě umí hodně. Právě proto je to velmi populární kus software, přestože to asi není podle unixových principů. Pořád je to ale velmi kompaktní věc, balíček má půl mega, nainstalované to má něco přes megabajt.
Nejen HTTP(S). Nginx umožňuje pracovat nad čistým TCP spojením, má moduly pro SMTP, POP3, IMAP…
Původně byl nginx pokud vím zamýšlen víc jako load balancer nebo reverzní proxy, teprve časem se jeho hlavní náplní stalo HTTP(S).
Porušení unixového principu řešení pouze jednoho problému to zcela jistě je, ale on ten princip není jediný správný. A náběh na moloch – ona je to spíš historická zátěž, podle mne už se nginx moc do šířky nerozšiřuje. Ale přidávání nových vlastností na můj vkus není moc rychlé, zejména v porovnání s dřívějškem, kdy nginx vedle Apache vypadal neuvěřitelně inovativně.
Ono do nginx není moc co přidávat. Něco mají v komerční verzi a očividně nikomu nestojí za to to reimplementovat po svém do open source. Zbytek obstarají 3rd party moduly.
Hlavní důvod, proč nginx neroste do šíře je to, že se rozhodli nepodporovat kraviny typu .htaccess, vnořené a zkřížené nastavení pro directories a locations atp. Tím hodně (a dobře!) definovali konfigurační rámec a i to, které funkce v nginx nikdy nebudou.
Apache taky využívá PHP-FPM, ten princip je naprosto stejný.
Apache lze nastavit do stejné čistoty a velmi podobného výkonu, jako nginx. Spíš bývá překážkou to, že uživatelé apache jsou zvyklí na různé moduly, které upravují obsah nebo zpracování. Příkladem je .htaccess. To jsou věci, které apachi užírají podstatnou část výkonu a nedá se s tím nic dělat. Když je vypnete a nastavíte apache čistého, s nginx si nezadá.
U nginx máte zase výhodu toho, že si vzali za své nedopustit, aby se do něj vůbec dostaly funkce, u kterých se nedá výkon vyřešit. Nginx Vám prostě nepovolí rekurzivní location, nedovolí Vám složitá rewrite pravidla (ta efektivní se dají napsat jinak, mnohem lépe), nedovolí Vám hokej v tom, co je Directory a co Location...
Extrémním příkladem, jak se dá nastavení apache a PHP zničit je XAMPP.
Však se od něj taky víc nechce. Na nginxu uzavíráte https, vlastní to privilegovaný tcp port, a maximálně servíruje pár statických souborů. Na všechno ostatní jsou aplikační servery, na které nginx provoz přesměrovává (proto "reverzní proxy").
Doby kdy server vystavený do internetu byl zároveň aplikační (ve stylu apache+mod_php) jsou už naštěstí pryč. Proces vystavený do internetu díky tomu neobsahuje prakticky žádná citlivá data.
Apache i nginx jsou webové soubory – poskytují soubory přes HTTP. A oba dva umí navíc spouštět i různé skripty, jejichž výstup se pak přenese klientovy místo souboru. To spouštění skriptů ale vždy byla u webového serveru funkce navíc – jednu dobu velmi podstatná, ale její význam už zase trochu klesl, když se SPA obejdou s menším množstvím serverového kódu, protože se část (někdy značná) logiky přesouvá do prohlížeče.
A ten zbytek kolikrát tvoří proxované api jiného http serveru, jako uwsgi / gunicorn, nebo webového frameworku který sám o sobě http api poskytuje.
Pokud jde o čitou reverzní proxy, je dost zajímavý envoy. https://www.envoyproxy.io/docs/envoy/latest/
Jinak i přímo Petr Krčmář má o nginxu dobře stravitelnou přednášku: https://www.youtube.com/watch?v=MRpKBh7J0eo
Pokud znáte spíš Apache a chcete jej nějak moderně (víc po vzoru nginxu) konfigurovat, docela se mi líbil tento článek: https://arstechnica.com/information-technology/2020/05/apache-101-0-wordpress-in-15-minutes/