Wydajny serwer WWW na Linux Debian 7.0 Wheezy dla VPSów

Wydajny serwer WWW na Linux Debian 7.0 Wheezy dla VPSów

vpsRozwój wirtualizacji w ostatnich latach pozwolił na stworzenie bardzo wydajnych, skalowalnych środowisk, pozwalających na znaczne ograniczenie kosztów poszczególnych funkcji serwera. Zmiany wyraźnie widać w usługach hostingowych, gdzie większość małych firm woli zakupić VPS, który mogą dowolnie i elastycznie konfigurować, zamiast sztywnej usługi konta hostingowego.

Tanie VPSy, zazwyczaj nie grzeszą wydajnością na poziomie Xeon E5-2420, zwłaszcza, jeśli nie jesteśmy sami na maszynie hostującej wirtualizację. Co zatem zrobić, żeby nie płacić za większą wydajność VPS, a cieszyć się w miarę dobrymi osiągami? Odpowiedź niestety nie jest jednoznaczna, jednak dla większości małych stron internetowych, gdzie zazwyczaj na tym samym VPS chodzi jeszcze serwer poczty, ftp czy też SQL, zwykle wystarcza odpowiednio stuningowana konfiguracja serwera WWW wraz z serwerem bazodanowym.

Serwer WWW – Instalacja NGINX + PHP5-FPM

Dlaczego nie Apache? Otóż Apache nadaje się bardziej do zastosowań developerskich niż produkcyjnych (może mocno przesadziłem, ale tam, gdzie liczy się ekstremalna wydajność, należy o nim zapomnieć). Dla chętnych, którzy chcieliby zobaczyć jak to wygląda w testach odsyłam tutaj: http://www.organic-development.com/blog/apache-vs-nginx-performance-comparison.html)

Jak przygotować i skąd wziąć takiego? W standardowych repozytoriach można znaleźć nginx’a, jednak zdecydowanie polecam instalować go z dotdeb.org. Aby dodać repozytoria dotdeb, zaloguj się w do konsoli jako root i dopisz w /etc/apt/sources.list:

deb http://packages.dotdeb.org stable all

Następnie dodać klucze GnuPG za pomocą następującego polecenia:

wget http://www.dotdeb.org/dotdeb.gpg && cat dotdeb.gpg | apt-key add – && rm dotdeb.gpg

Aktualizujemy informację o pakietach:

apt-get update

Zapewne chciałbyś używać języka PHP na swoim serwerze WWW, nic prostszego, zainstaluj go w wersji FPM:

apt-get install php5 php5-fpm php-pear php5-common [php5-mcrypt php5-mysql php5-cli php5-gd php5-curl]

Uwaga, w nawiasie kwadratowym zostały dodane opcjonalne pakiety dla PHP. W tym miejscu możesz dodać swoje ulubione biblioteki do PHP. Jeśli chcesz zainstalować tak jak wyżej, usuń nawiasy [ i ] oraz wciśnij enter. Po instalacji PHP, a właściwiej, serwera PHP, pora przystąpić do instalacji serwera www NGINX. Warto nadmienić, że w wersji przygotowanej przez dotdeb występuje on w kilku odmianach (full, light, extras, etc).

apt-get install nginx

Po chwili powinniśmy cieszyć się naszym serwerem WWW. NGINX’owe pliki konfiguracyjne zachowują “Apacheowy” porządek – wszystko znajduje się w /etc/nginx, wraz z sites-available oraz sites-enabled.

 Konfiguracja PHP5-FPM

Na początku polecam odwiedzić /etc/php5/fpm/pool.d, w którym znajduje się plik www.conf odpowiedzialny za konfigurację socketa PHP). Aby zwiększyć możliwości odpowiedzi naszego PHP, zrób ok. 5 kopii tego pliku i nazwij je np. www2.conf www3.conf www4.conf www5.conf. Następnie edytuj każdy z nich i ustaw im odpowiednie nazwy (najlepiej odpowiadające nazwie pliku) np dla www2.conf:

; Start a new pool named ‘www’.
; the variable $pool can we used in any directive and will be replaced by the
; pool name (‘www’ here)
[www2]

; Per pool prefix
; It only applies on the following directives:
; – ‘slowlog’
(…)

Następnie odszukaj miejsce, gdzie znajduje się informacja, w jaki sposób nasłuchuje PHP:

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; ‘ip.add.re.ss:port’ – to listen on a TCP socket to a specific address on
; a specific port;
; ‘port’ – to listen on a TCP socket to all addresses on a
; specific port;
; ‘/path/to/unix/socket’ – to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php5-fpm.sock

Domyślnie PHP nasłuchuje na normalnym sockecie. Należy to zmienić, zastępując linijkę /var/run/php5-fpm.sock numerem portu np. 9001

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; ‘ip.add.re.ss:port’ – to listen on a TCP socket to a specific address on
; a specific port;
; ‘port’ – to listen on a TCP socket to all addresses on a
; specific port;
; ‘/path/to/unix/socket’ – to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9001

Operację tę należy powtórzyć dla każdego pliku w katalogu pool.d i zrestartować PHP:

/etc/init.d/php5-fpm restart

Jeśli wszystko zostało wpisane prawidłowo, po wpisaniu netstat -tln powinieneś zobaczyć porty, które zostały wpisane w konfiguracji PHP.

Konfiguracja NGINX

W pliku /etc/nginx/nginx.conf, przed sekcją events należy ustawić odpowiednie parametry, aby nasz serwer wykorzystywał w 100% swoje możliwości. Należy zmienić liczbę:

worker_processes 4;

Na taką, która odpowiada ilości rdzeni na naszej maszynie. Ilość rdzeni możemy sprawdzić za pomocą polecenia:

cat /proc/cpuinfo

Następnie w sekcji events należy ustawić optymalną ilość worker_connections (ilości jednocześnie obsługiwanych klientów). Jaka to wartość? Wszystko zależy od naszej maszyny i ilości osób, jaką chcemy obsłużyć. Na początek warto ustawić 1024 i obserwować. Ilość klientów przy worker_processes 4 będzie wynosić 4*1024 = 4096. Następnie warto dodać linijkę:

worker_rlimit_nofile 65536;

oraz zwiększyć limity dla jednocześnie otwartych plików dopisując na końcu /etc/security/limits.conf:

www-data soft nofile 65536
www-data hard nofile 65536

Aby limity działały, należy w /etc/pam.d/su odkomentować linijkę (pod koniec pliku):

 session    required   pam_limits.so

i przeładować NGINX wraz z PHP.

Teraz tylko wystarczy stworzyć w konfiguracji NGINX odpowiedni upstream oraz dodać informację, gdzie serwer ma kierować skrypty. W pliku /etc/nginx/sites-available/default dodajemy na końcu:

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini

# # With php5-cgi alone:
fastcgi_pass php;
# With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

upstream php {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
server 127.0.0.1:9004;
}

Teraz tylko przeładowanie konfiguracji:

/etc/init.d/nginx reload

Gratulacje! Posiadasz bardzo wydajny serwer WWW na Linux Debian 7.0 Wheezy!

Udostępnij ten post

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *