# Nginx vs Apache

## soban_

Tak jak w temacie, co wolicie i dlaczego. Ostatnio duzo mysle nad przesiadka, ale nie wiem czy warto.

----------

## SlashBeast

Skoro nie wiesz czy warto, to sie nie przenos.

Nginx nie dziala tak jak apache.

----------

## Zwierzak

Lighttpd  :Wink: 

A tak na serio to zależy co potrzebujesz. Jeżeli chcesz gotowe snippety od programistów to bierz apache. Wszyscy programiści zakładają, że wszyscy używają apache. Jeżeli potrafisz samemu skonfigurować lub potrafisz znaleźć porady to skorzystaj z innych serwerów. Ale pamiętaj, że mogą one tworzyć więcej problemów dla ciebie.

----------

## soban_

To raczej ja tworze serwer akurat tutaj - dlatego chce uslyszec jakies zalety, ktore mnie przekonaja do zmiany. Mysle ze i tak przetestuje nginx - ale chce uslyszec Wasza opienie. Troche sie nagooglowalem o nim i ponoc jest lepszy przy wiekszej ilosci zapytan (szybszy) - no ale lubie sluchac co wychodzi w praniu.

----------

## Zwierzak

To wszystko zależy. Jeżeli masz mocne serwery to najlepiej opłaca się dobrze skonfigurowany apache. Ale to dotyczy sprzętu od samego początku skonfigurowanego mocnego serwera. Na serwerach typu VPS bardziej się opłacają lekkie serwery. Ale patrząc na serwisy od JoeMonster (Demotywatory itd.) to nawet nginx'a można zabić.

----------

## SlashBeast

Gwoli scislosci - na przykladzie demotywatorow, to nie tak, ze tam 'nginksa da sie zabic', nginx daje rade, a to, ze czasem leca bledy 502 lub 503 to z winy backendu, ponoc tam maja php, php nie ogarnia, leca timeouty. Nginx sam w sobie nie serwuje dynamicznego contentu, php robisz tam i tak po fastcgi, do tego modul proxy, uwsgi itp.

Apache to jest po prostu jakis koszmar jezeli chodzi o zasoby, ile on potrafi zjesc ramu i uzyc czasu procesora na raptem kilkaset zapytan. Znowu Apache posiada idioto-odporny mod_php, mod_perl czy mod_python, posiada .htaccess i przez to, ze jest bardzo popularny, internet jest pelen roznych poradnikow do niego.

Co do lighttpd, ma fajny syntax configu, sporo ficzerow. Ma tez wady, np. z nieznanego mi powodu, jezeli php dziala na userze joe a lightly na swoim 'lighttpd', nie wykona skryput php, po fastcgi, jezeli user lighttpd nie bedzie mial do niego praw dostepu, co jest conajmniej dziwnie biorac pod uwage, ze powinien po prostu wyslac request po fastgi z script_filename i tyle. I znowu lighttpd wyglada na martwy projekt, wersji 1.5 doczekac sie nie moza, od blisko roku nie bylo nawet jednego wydania wersji 1.4, nie szedl bym w lighttpd.

Do nginksa nie ma co podchodzic jak nie znasz dokumentacji, internet jest pelen poradnikow do niego, niektore sa tak zle, ze az strach pomyslec, ze ktos naprawde wykonywal to, co w nich jest napisane. Nginx jest super wydajny, praktycznie nie uzywa ramu, idlujac bez polaczen je ok 1.8M (na testach lighttpd w idle jadl 1.2M).  W tym momencie nginx na pewnej stronie z 230 osobami online je 15M ramu.

Wszystko zalezy od zastosowan, w niektorych apache wygrywa ficzerami, w innych nginx wydajnoscia.

----------

## Dagger

Osobiscie zaczalem przerzucac wszystkie servery z Apache na Nginx. Apache zaczal mnie dobijac zuzyciem zasobow, tym ze restart zajmuje kupe czas i openrc czesto timeouttuje, oraz tym ze od czasu do czasu po prostu przestaje dzialac i tylko restart servera pomaga (zadnych informacji w logach).

Z wstepnych testow na Zend Framework - based stronce ktora jest bardzo ciezka i wymaga duza ilosc zasobow, ruznica wydajnosci jest okolo 20% na kozysc Nginx. Uzycie pamieci Apache + mod_php VS Nginx + mod_fastcgi + php-fpm siega zaledwie 30% na kozysc Nginx (300MB nginx+php vs 1GB apache+php).

Jak SlashBeast wspomnial - glownie zalezy od potrzeb i zastosowania.

----------

## Jacekalex

Nginx z php-fpm jest bardzo szybki, ale na razie (o ile mi wiadomo),nie dorobil się natywnej obsługi skryptów CGI (trzeba kombinować z zewn. skryptami, co z bezpieczeństwem ma niewiele wspólnego),

do tego konfiguracja 3x dłuższa do Lighttpd.

Co do szybkości, Nginx z php-fpm jest szybszy o okolo 15% od Lighttpd z tym samym php-fpm.

Oba działają  kilka razy szybciej od Apacha 2.2, ciekawe, jak wyjdzie Apache 2.4 - ma byś serwerem  przełomowym pod względem wydajności i bezpieczeństwa.

Reasumując - na nieduży lub średni  serwerek dałbym Lighttpd, na jakiś kosmicznie olbrzymi Nginxa, ale przy Nginxie zostawiłbym Lighttpd (schowany za Nginx - Proxy)  do skryptów CGI, i programów adminstracyjnych, jak Phpmyadmin.

W dodatku i Nginx i Lighttpd mają jedną fajną rzecz: można filtrować zapytania GET i POST bezpośrednio regexem, bez zadnych zewnętrznych modułów jak mod-security,czy rewrite, i można bardzo dokładnie filtrować dane wysyłane do serwera.

Robi się to zauważalnie prościej, niż w w Apachowym rewrite.

Pozdrawiam

 :Cool: 

----------

## gryf

Nginx, bo jest mały, niezbyt łasy na zasoby, na moje skromne potrzeby wystarczający. Nie potrzebuję mod_php, pythonowe aplikacje wypycham po fcgi. Z kolei nginx potrafi być upierdliwy w konfiguracji, Apache jest bardziej "przyjazny" w tej materii.

----------

## n3rd

Apache i Ngnix to zupełnie przeciwstawne podejścia do tego, jak powinno programować się aplikacje sieciowe. Wszystko zmieniło się wraz z powstaniem procesorów wielordzeniowych - od tego czasu szybkość aplikacji coraz silniej zaczęła wynikać z tego, jak dana aplikacja potrafiła pracować współbieżnie. Ludzie z Apacha wybrali drogę tworzenia wielu wątków - niestety taka struktura aplikacji to koszmar jeżeli chodzi o synchronizację ze sobą poszczególnych wątków oraz zarządzanie nimi. Ngnix stosuje polling (np. epoll pod linuksem), który opiera się na blokowaniach procesów (lub wątków), przy czym mamy tu jednego workera na jeden rdzeń procesora oraz mechanizm, który nimi zarządza. Taka budowa pozwala znacznie efektywniej wykorzystać zasoby systemowe (i jest całkiem elegancka).

Problem zaczyna się przy bardzo dużych obciążeniach. epoll to nic innego jak struktura danych, która zawiera tzw. deskryptory zdarzeń i te deskryptory są zarządzanie przez mechanizm jądra. Niestety aplikacja działa w przestrzeni użytkownika a mechanizm epoll w przestrzeni jądra - to oznacza, że takie struktury pamięci muszą być przez cały czas kopiowane między przestrzenią jądra oraz użytkownika, co generuje niepotrzebne obciążenia jądra systemowego. I teraz należy sobie uświadomić, że mechanizmem blokowania jest najczęściej jakiś timer, który określa blokadę na określoną liczbę mikrosekund (1 us to 1 mln część sekundy). To nie będzie miało większego znaczenia, przy obciążeniach dochodzących do 10k na sekundę ale powyżej fakt zakładania blokady na kilka mikrosekund może bardzo utrudniać osiąganie lepszych wyników.

Jeżeli chodzi o ngnix vs apache, to bardziej sensownie jest zaprojektowany ngnix. Apache ma znakomite moduły poprawiające bezpieczeństwo.. i to chyba jego główna zaleta (przynajmniej w mojej opinii). Oba serwery nie są jednak tym, czym powinna być aplikacja sieciowa - gdyby były właściwie zbudowane ich wydajność wzrosłaby przynajmniej dziesięciokrotnie.

pozdrawiam,

daniel

edit: jeżeli ktoś potrzebuje super-szybkiego http, to polecam zobaczyć g-wan (niestety to nie jest open-source...)

http://gwan.ch/

----------

