Instalacja i konfiguracja Nginx + PHP-fpm w Debianie

by Nataliya Oteir
Instalacja i konfiguracja Nginx + PHP-fpm w Debianie
star 5
0
Czytaj 5 min.

Nginx to serwer internetowy, który został wydany w 2004 roku. Serwer ten jest łatwy w użyciu, ale mimo to doskonale obsługuje wiele połączeń. Cecha ta wynika z jego wewnętrznej architektury. Początkowo został stworzony jako serwer obsługujący statyczną zawartość (tzw. serwer buforujący). W przeciwieństwie do Apache, Nginx nie ma wbudowanego interpretera do obsługi dynamicznych żądań treści.

Wymaga to dalszej interakcji między serwerem WWW a aplikacją. Menedżer procesów PHP-FPM (FastCGI) z powodzeniem rozwiązuje ten problem. Ważną kwestią jest to, że w pracy z PHP spoiwo Nginx + PHP-FPM okazuje się mniej wydajne niż Apache + php_mod.

Jeśli więc twój serwer ma wysokie wymagania wydajnościowe dla PHP, lepiej przyjrzeć się pakietowi apache + php_mod. Inną ważną kwestią jest to, że konfiguracja Nginx wymaga więcej wysiłku niż Apache.

Ten artykuł dotyczy instalacji i prostej konfiguracji serwera Nginx w połączeniu z menedżerem procesów PHP-FPM w Debianie 8. Wszystkie operacje są wykonywane z uprawnieniami użytkownika root.

Najpierw należy dokonać aktualizacji:

apt-get update

Następnie instalujemy Nginx:

apt-get -y install nginx

Po instalacji przetestujemy serwer. Aby to zrobić, wystarczy otworzyć adres przeglądarki internetowej naszego serwera. Otworzy się następująca zawartość:

Jest to standardowa strona wtyczki dla Nginx. Następnym krokiem jest instalacja php5-fpm. To bardzo proste:

apt-get -y install php5-fpm

Następnie należy przeprowadzić konfigurację. Najpierw należy skonfigurować serwer Nginx. Plik konfiguracyjny znajduje się w /etc/nginx/nginx.conf.

Otwórz ten plik. Używamy edytora tekstu vi, ale możesz użyć dowolnego innego, który Ci odpowiada.

vi  /etc/nginx/nginx.conf

Przyjrzyjmy się nieco strukturze samego pliku. Cały plik jest nieco podobny do kodu programu. Zawiera on dyrektywy. Są one podzielone na dwa typy:

  • Proste - ciąg znaków z operatorami zakończonymi symbolem ";". Na przykład: pid /run/nginx.pid;
  • Block - dyrektywa zawierająca dodatkowe parametry umieszczone w nawiasach klamrowych {}.

Inne dyrektywy mogą być ustawione wewnątrz nawiasów klamrowych. W takim przypadku będzie on nazywany kontekstem, a wszystkie dyrektywy, które znajdują się w pliku konfiguracyjnym, ale nie są ujęte w nawiasy klamrowe, znajdują się w kontekście globalnym lub tak zwanym kontekście głównym.

Ciągi oznaczone symbolem # są komentarzami i nie są brane pod uwagę w konfiguracji.

Jak widać w pliku znajduje się dyrektywa:

include /etc/nginx/sites-enabled/*;

Ta dyrektywa mówi, że ten plik konfiguracyjny zawiera wszystkie pliki konfiguracyjne z katalogu /etc/nginx/sites-enabled/directory. Katalog ten zasadniczo zawiera dowiązania symboliczne do konfiguracji wirtualnych hostów (zasadniczo witryn obsługiwanych na serwerze).

Teraz musimy skonfigurować wirtualny host, który będzie odpowiedzialny za nasz najprostszy zasób (niech to będzie test.net). Najpierw utworzymy dla niego katalog. Niech to będzie komenda:

mkdir -p /var/www/test.net/html

Teraz stwórzmy w tym katalogu plik index.html z następującą zawartością:

<html>
   <head>
      <title>Hello World</title>
   </head>
   <body>
      <h>This is a test page.</h>
   </body>
</html>

Teraz mamy zawartość witryny, niech i jedna strona wszystkiego. Dla tej witryny należy utworzyć wirtualny host. Skopiuj domyślny plik dla wirtualnego hosta:

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/test.net

Następnie otwórz go do edycji. Dyrektywa listen ma opcje dla default_server. Tylko jeden blok może być ustawiony z tą wartością, co oznacza, że ten blok będzie obsługiwał zapytania, dla których nie znaleziono nic bardziej odpowiedniego. Dlatego linie

listen 80 default_server;
listen [::]:80 default_server;

należy usunąć z tego pliku. Następnie należy skonfigurować katalog główny zawierający zawartość naszej witryny. Aby to zrobić, piszemy dyrektywę root w następujący sposób:

root /var/www/test.net/html;

Poniższa dyrektywa index definiuje pliki, które mają być używane jako pliki indeksu. Kolejność, w jakiej pliki są sprawdzane, odpowiada kolejności w pliku konfiguracyjnym. Ta dyrektywa jest zapisana w następujący sposób:

index index.html index.htm index.nginx-debian.html;

Następująca dyrektywa server_name określa nazwę serwera. Jako wartości określamy nazwę domeny i alias, gdy nazwa domeny jest określona z prefiksem www.

server_name test.net www.test.net;

Następnie wystarczy określić dyrektywę lokalizacji, która ustawia konfigurację witryny na podstawie nazwy URI określonej w żądaniu. W naszym przypadku będzie to wyglądało prosto:

location / {
   try_files $uri $uri/ =404;
}

Oznacza to, że najpierw sprawdzane będą pliki, następnie katalogi, a jeśli nic odpowiedniego nie zostanie znalezione, zwrócony zostanie komunikat Not Found (404).

To wszystko w pliku konfiguracyjnym. Jego ostateczna zawartość jest następująca:

#cat /etc/nginx/sites-available/test.net
server {
     root /var/www/test.net/html;
     index index.html index.htm index.nginx-debian.html;
     server_name test.net www.test.net;
     location / {
           try_files $uri $uri/ =404;
     }
}

Wszystkie pozostałe dyrektywy i ich wartości można przeczytać w oficjalnej dokumentacji Nginx, która znajduje się tutaj http://nginx.org/en/docs/.

Teraz mamy już zawartość strony i jej plik konfiguracyjny. Pozostaje go dołączyć. Aby to zrobić, utwórz dowiązanie symboliczne:

ln -s /etc/nginx/sites-available/test.net /etc/nginx/sites-enabled/

Uruchom ponownie serwer, aby zmiany weszły w życie:

/etc/init.d/nginx restart

Sprawdźmy działanie utworzonego zasobu.

Aby otworzyć stronę, może być konieczne dodanie linii do pliku hosts na komputerze, z którego sprawdzamy:

xxx.xxx.xxx.xxx test.net

Где xxx.xxx.xxx.xxx - это IP-адрес сервера с установленным Nginx. Hosty, находится:

  • C:\Windows\System32\drivers\etc (в Win7);
  • /etc/hosts (w Debianie).

Zainstalowaliśmy Nginx i php5-fpm, a także stworzyliśmy najprostszą witrynę. Następnym krokiem jest skonfigurowanie PHP i zastosowanie go z Nginx.

Najpierw utworzymy stronę z kodem PHP na naszym wirtualnym hoście. Utwórzmy plik /var/www/test.net/html/info.php w następujący sposób:

<?php
phpinfo();
?>

Teraz otwórzmy tę stronę w przeglądarce http://test.net/info.php

Ale co z wykonaniem kodu PHP? Kod PHP, którego nie wykonaliśmy, ponieważ interpreter PHP nie jest skonfigurowany w Nginx. Zróbmy tak.

Otwórzmy nasz plik konfiguracyjny /etc/nginx/sites-available/test.net. Dodaj następującą dyrektywę blokową:

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Ta dyrektywa opisuje parametry przetwarzania zapytań przechodzących do plików PHP. Nie będę opisywał każdego parametru i jego wartości. Informacje te można znaleźć w oficjalnej dokumentacji tutaj http://nginx.org/en/docs/dirindex.html

Teraz nasz plik konfiguracyjny wygląda następująco:

server {
root /var/www/test.net/html;
index index.html index.htm index.nginx-debian.html;
server_name test.net www.test.net;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Zapisujemy zmiany w pliku i restartujemy nasz serwer Nginx.

/etc/init.d/nginx restart

Teraz spróbujmy ponownie otworzyć http://test.net/info.php. Wynik powinien wyglądać następująco:

Na zrzucie ekranu zaznaczyłem informacje, które wskazują na użycie menadżera FPM.

W rzeczywistości najprostsza konfiguracja serwera Nginx + PHP-FPM jest kompletna. Najprostsza witryna została utworzona i skonfigurowana do pracy z PHP.

Zobacz poniższy artykuł na temat konfiguracji PHP-FPM.

Nowe posty

VAT

  • Other

    Other

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    %
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • Other
  • canada
  • poland
  • european-union
  • france
  • germany
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria