Autor Zpráva
Peet
Profil
Chtel bych se vas zeptat na nazor a samozrejme na poznatky z praxe ohledne web serveru.

Koukal jsem, ze uz vetsina znamych i vetsich projektu jede na nginx (opravdu spoustu) a proto bych se chtel zeptat, nez zabiju nekolik hodin u nastavovani nginxu, jestli je opravdu razantni rozdil pouziti **Nginx** oproti **Apache 2.4.29 - php-fpm - fcgi_proxy**

Jestli jsem to spravne pochopil, tak Nginx cachuje vetsinu v proxy ? a do browser cache uklada minimalne. Je to tim, ze poziva reverzni proxy ?

Chova se stejne i Apache se zapnutym fcgi_proxy nebo jde o neco jineho ?

V cem presne je tedy technicky rozdil apache od nginx, kdyby mel nekdo chut popsat rozdil v ceste client-server budu jedine rad :)
M4n
Profil *
Zajímavé. Každé slovo z tvého příspěvku je špatně.

Přečti si něco o těch modulech a serverech, začni klidně na Wiki. Nginx je rychlejší, paměťově úspornější, stabilnější ve vysoké zátěži, ale má omezenější možnosti nastavení a použití modulů oproti Apachi. Pokud neplánuješ provozovat Ngingx jako load-balancer nebo proxy pro další servery, tak jeho použitím nic nezískáš.
smitka
Profil
U Apache záleží především na tom, jaký MPM modul používá. MPM Event má k Nginxu nejblíže (ve 2.4, ve 2.2 byl experimentální a problematický). když se k tomu zakáže použití .htaccess a trochu se vyladí konfigurace, tak se lze dostat na výkon dost podobný jako u Nginx.

Nginx používá pro obsluhu požadavků event loop, což je narozdíl od starších MPM v Apache neblokující přístup:

Starší MPM fungují tak, že běží dejme tomu 100 vláken, každé vlákno zpracovává jeden úkol - třeba načtení souboru. To však nějakou dobu trvá a než se soubor načte, jak je vlákno blokováno a nemůže dělat nic jiného. Při větší zátěži se tak stane, že je mnoho blokovaných vláken, které se nic nedělají, čekají a zabírají prostředky. Event loop funguje naopak tak, že řekne načti mi soubor a pak mi dej vědět, že je to hotovo a mezitím může obsluhovat další požadavky. Práce s vlákny je sama o sobě dost náročná - když procesor vlákno odloží, musí provést "context switching", aby mohl dělat další věc (třeba se vrhnout na načítání souboru). To je poměrně náročná operace, kde se různě přesouvají data pro zpracování. U 100 vláken to již způsobí dost velkou zátěž. U event loopu se kontext přepínat potřebuje mnohem méně. To je i důvod proč doporučuji u serverů monitorovat i počet přepnutí kontextu za jednotku času, může to odhalit problémy.

Takto to velmi zjednodušeně funguje. Přistup s event loopem díky neblokování je velmi hodí na načítání statických souborů a také u něj tolik "nevysí" navázaná spojení. Proto se často používá i jen jako reverzní proxy před Apache.

Dalším problémem Apache je .htaccess, což je sice fajn věc, ale bere dost výkonu:
www.slideshare.net/vsmitka/vkon-wordpress/36

Když ho zakáži a konfiguraci různé rewrity si napíšu přímo do konfigurace, tak získám dost výkonu navíc.

Vyladit Apache je vcelku pracné a dostanu se jen na to, co Nginx nabízí již v základu. Proto si myslím, že je lepší se s Nginxem naučit pracovat. Jako začáteční inspirace může posloužit vzorový výtah naší konfigurace pro WordPress: github.com/lynt-smitka/WP-nginx-config
pcmanik
Profil
smitka:
Pekné informácie! Za mňa palec hore. :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0