Czy istnieje lekki serwer WWW, który będzie obsługiwał treści dynamiczne?

21

Buduję obraz na serwerze Nagios. Jednym z problemów Raspberry Pi jest to, że pamięć na Raspberry Pi jest dość mała. Więc użyję lekkiego interfejsu opartego na php-apc zamiast standardowego.

Zastanawiałem się, jaki lekki serwer WWW jest zalecany?

Zastanawiałem się nad minimalnym serwerem internetowym, który może zrobić php i zapewnić SSL. Myślałem o Apache2 lub Nginx. Chociaż myślę, że Apache nadal przewyższa Nginx, ponieważ zawartość jest dynamiczna.

Lucas Kauffman
źródło
1
Nginx z łatwością przewyższy Apache.
Alex Chamberlain,
@AlexChamberlain na temat treści statycznych, ale nie dynamicznych.
Lucas Kauffman,
5
Roszczenie. To zależy od tego, co rozumiesz przez wydajność. Nginx zużyje mniej pamięci, mniej wycieków i szybciej obsłuży (statyczne) pliki. Z mojego (ograniczonego, ale technicznego) doświadczenia wynika, że ​​zawartość dynamiczna jest udostępniana tak szybko lub szybciej niż Apache. Biorąc pod uwagę profil pamięci Nginx, będzie działał znacznie lepiej na Raspberry Pi. Zaletą Apache - choć nie tutaj - jest bardziej stabilny i jest więcej doświadczonych techników.
Alex Chamberlain,
Nie rozważyłbym nawet Apache w 256 MB, chyba że masz bardzo skomplikowaną konfigurację, której nginx lub lighttpd nie są w stanie zarządzać
John La Rooy

Odpowiedzi:

17

Prawdziwe pytanie brzmi: „Czy potrzebujesz wszystkich funkcji, które zapewnia Apache?” (lub co ważniejsze: „Czy chcesz zużyć pamięć na te funkcje?”) - Możesz skompilować BARDZO zredukowaną Apache + mod_perl lub mod_php, aby uruchomić interfejs sieciowy Nagios (lub apache Über-Stripped, który po prostu uruchamia perg CGI), ale nawet w minimalistycznej formie Apache prawdopodobnie zajmie więcej pamięci niż nginx, aby wykonać tę samą pracę - po prostu nie został zbudowany jako mały.

Aby być w 100% pewnym, możesz chcieć zrobić wypalenie (skompiluj zarówno nginx, jak i Apache i sprawdź, które zjadają mniej pamięci RAM), ale moje doświadczenie na „normalnych” serwerach mówi mi, że nginx jest prawdopodobnie lepszym wyborem dla małej pamięci konfiguracja: rezygnujesz z pewnej elastyczności Apache, ale jeśli i tak nie potrzebujesz (a większość stron tego nie robi ), nigdy nie zauważysz różnicy.


Wydajność (czasowa) Wątpię, czy ograniczy cię serwer internetowy - Wszystkie wymyślone testy porównawcze na bok, jeśli robisz wystarczająco dużo, gdy wydajność silnika serwera rozdającego strony jest tak ważna, że ​​prawdopodobnie idziesz do pieczenia twojego Raspberry Pi (i tak naprawdę, ile osób będzie jednocześnie patrzeć na twoje dane monitorowania? :-).
To prawie aksjomat, że możesz zoptymalizować system pod kątem przestrzeni lub czasu, ale nigdy jedno i drugie - a na przestrzeni Raspberry Pi jest prawdopodobnie twoim ograniczeniem.

voretaq7
źródło
Jestem sceptycznie nastawiony do tego, że Apache jest obecnie znacznie potężniejszy niż Nginx.
Alex Chamberlain,
@AlexChamberlain Jeśli dokładnie przeczytasz mój post, zauważysz, że nigdy nie użyłem tego słowa powerful(ponieważ jest to niezdefiniowany termin). Powiedziałem flexible(odnosząc się do tego, na ile sposobów można skonfigurować serwer podstawowy bez kości, aby spełnić potrzeby). Nie ma to źle odzwierciedlać żadnego z serwerów: oba są doskonałymi fragmentami kodu, ale mają bardzo różne cele projektowe. Apache został zaprojektowany tak, aby być wszystkim dla wszystkich - ciężarówką, w której można spakować cały dom. nginx ma być mały i szybki - samochód sportowy, ale nie możesz zabrać ze sobą żony, dzieci, teściów i rodzinnego psa.
voretaq7
Myślę, że Nginx rośnie ... teraz przynajmniej hatchback i cały czas rośnie. Może obsługiwać wszystkie główne języki dynamiczne w taki czy inny sposób, obsługuje SSL, a SPDY jest obecnie w fazie Beta.
Alex Chamberlain,
15

Nginx

Mam dobre doświadczenia z Nginx jako serwerem internetowym. Połączyłem go z lekkim frameworkiem WSGI , takim jak butelka lub kolba, do szybkiego tworzenia aplikacji w Pythonie.

Nie oczekuj jednak, że będzie on obsługiwał więcej niż 10 żądań na sekundę :)

Instalacja

Nginx znajduje się zarówno w repozytoriach Debian / Raspbian, jak i Arch, więc można go zainstalować za pomocą jednego polecenia.

Łuk

sudo pacman -Sy nginx

Debian / Raspbian

sudo apt-get install nginx

Konfiguracja

Istnieje wiele przykładów konfiguracji w całym Internecie, a szczegółowe wyjaśnienie prawdopodobnie wykracza poza zakres tego pytania. Istnieje wiele przykładów na Wiki Nginx, a lista mailingowa jest bardzo pomocna.

Ponieważ wspomniałeś o PHP, bardzo zainteresuje Cię informacja, że ​​standardowy /etc/nginx/nginx.confplik zawiera przykład PHP.

John La Rooy
źródło
Kocham Nginx. Bardzo łatwy do rozbudowy dzięki modułowemu systemowi.
Alex Chamberlain,
1
Mogłem nieco rozszerzyć twoją odpowiedź, mam nadzieję, że nie masz nic przeciwko?
Alex Chamberlain,
1

node.js

Możesz użyć node.js, aby stworzyć serwer WWW o niskiej gramaturze. Zobacz następujący przykład z witryny z samouczkiem node.js:

var http = require('http');
  http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.write("Dynamic contents...");
      res.end('Hello World\n');
  }).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');

Powyższy kod to skrypt Java, dzięki czemu można napisać dynamiczną logikę generowania kodu w skrypcie Java i natychmiast zacząć z niego korzystać.

Będziesz musiał pobrać i skonfigurować node.js z linku: http: //nodejs.org/ dla Windows lub dowolnej platformy, której wolisz używać.

Uruchom serwer WWW za pomocą polecenia:

node hello.js
rashid.noorani
źródło
Ale czy Node.js mówi php?
Lucas Kauffman,
Node.JS jest używany w innych kontekstach. Nie działa dobrze jako samodzielny serwer, ponieważ cały kod to C ++. ALE! To świetnie, ponieważ możesz użyć węzła, aby BEZPOŚREDNIO uzyskać dostęp do GPIO i reszty sprzętu niskiego poziomu za pomocą +1 dla node.js +1. Ale wciąż potrzebujesz interfejsu, takiego jak apache / lighttpd / iis, aby obsłużyć zawartość
Piotr Kula
@LucasKauffman Nie - to nie jest tak naprawdę serwer WWW, a raczej aplikacja internetowa.
Alex Chamberlain,
1
Witamy w Stack Exchange. Fajna odpowiedź, ale obawiam się, że głosowałem, bo nie sądzę, że to rozwiązuje pytanie. OP chciał PHP i przyszłych czytelników prawdopodobnie będzie chciał serwer, który jest nieco bardziej zdolny.
Alex Chamberlain,
1
Używam Nagios, nie rozwijam własnej aplikacji: p
Lucas Kauffman,
0

Być może możesz rzucić okiem na to, co niektórzy ludzie używali w niskiej jakości pudełkach .

Zasadniczo jest to lighttpd + php-fcgi. Lighttpd jest naprawdę lekki, a php-fcgi można skonfigurować tak, aby używał tylko odrobiny pamięci. Miałem to ustawione na 64 MB VPS (nie nagios, ale CMS).

Nie wiem też, czy trzeba zoptymalizować MySQL, aby zużywał jak najmniej pamięci .

Może ci to pomóc, może nie. Jeszcze nie zacząłem używać mojego Raspi :)

Zlatko
źródło
0

Mako Server i BarracudaDrive pochodzą z tego samego źródła i te dwa serwery mogą dostarczać dynamicznie generowaną zawartość (przy użyciu języka skryptowego Lua) o 70% szybciej niż Apache może dostarczać zawartość statyczną. Wyniki testów porównawczych są tutaj: http://barracudadrive.com/blog/2013/03/Apache-Nginx-Lighttpd-Monkey-and-BarracudaDrive-Speed-Test

Serwer Mako można znaleźć tutaj: http://makoserver.net/

Wola
źródło
0

Używam kombinacji Nginx / Passenger do uruchamiania opartego na Ruby pi.gadgetoid.com 24/7 na 512Mb Raspberry Pi. To drastycznie przewyższa konfigurację Thin / Apache, której wcześniej używałem. Jest to publicznie dostępna strona o dość dużym natężeniu ruchu, chociaż dużo oszukiwałem, używając Cloudflare (proxy buforowania) do obsługi większości tego woluminu.

Jestem prawie pewien, że ta konfiguracja również byłaby wygodna na 256 MB Pi, ale miałem problemy ze skompilowaniem modułów Passenger i Nginx; napotyka ograniczenia pamięci.

Wiem, że to nie jest rozwiązanie PHP, i zapewne zostanę obalony za sugerowanie tak stycznej odpowiedzi; ale jeśli szukasz Pi, aby przekroczyć granice swojej wiedzy i robisz to dla jakiegoś swobodnego majsterkowania, zdecydowanie sugeruję przyjrzenie się Ruby i Sinatrze. W ciągu kilku tygodni będziesz kipiał nienawiścią do PHP.

Zasadniczo nie będziesz miał problemu z uruchomieniem stosu sieciowego PHP / Apache na serwerze 256 MB. Zrobiłem to w przypadku znacznie większych witryn w profesjonalnym charakterze w zakresie hostingu w chmurze. Kiedy MySQL się angażuje, robi się brzydko. Uruchamianie pełnego stosu LAMP na 256 MB jest co najmniej bolesne, ale nie jest niemożliwe w przypadku małego natężenia ruchu.

Phil Howard
źródło