Встановлення та настроювання Nginx + PHP-fpm у Debian

Встановлення та настроювання Nginx + PHP-fpm у Debian
Мануали
28 Sep 2016

Nginx – це веб-сервер, який був випущений у реліз у 2004 році. Цей сервер простий у використанні, але, незважаючи на це, він чудово справляється з великою кількістю підключень. Ця особливість обумовлена ​​його внутрішньою архітектурою. Спочатку він створювався як сервер, що працює зі статичним вмістом (так званий сервер, що кеширує). На відміну від сервера Apache, Nginx немає вбудованого інтерпретатора, що дозволяє обробляти запити до динамічного контенту.


Для цього необхідно додатково налагоджувати взаємодію між веб-сервером та програмою. Вирішенням цього завдання успішно займається менеджер процесів PHP-FPM(FastCGI). Важливим моментом є те, що в роботі з PHP зв'язка Nginx + PHP-FPM показує себе менш продуктивною, ніж Apache + php_mod.

Тому якщо на вашому сервері висуваються високі вимоги до продуктивності php, то краще подивитися у бік зв'язування apache + php_mod. Ще одним важливим моментом є те, що сервер Nginx вимагає більших зусиль з налаштування, ніж Apache. Ця стаття присвячена установці та найпростішому настроюванню Nginx сервера у зв'язці з менеджером процесів PHP-FPM в операційній системі Debian 8. Усі операції виконуються під привілеями користувача root.

Для початку необхідно оновитись:

apt-get update

Далі встановлюємо nginx:

apt-get –y install nginx

Після встановлення – перевіримо працездатність сервера. Для цього просто відкриємо у веб-браузері адресу нашого сервера. Повинно відкритися такий вміст:

Це стандартна сторінка-заглушка сервера nginx. Наступним кроком буде встановлення пакета php5-fpm. Все дуже просто:

apt-get -y install php5-fpm

Далі треба зайнятися налаштуванням. Спочатку налаштуємо сервер nginx. Конфігураційний файл знаходиться на шляху /etc/nginx/nginx.conf.

Відкриємо цей файл. Я використовую текстовий редактор vi, але ви можете використовувати будь-яку іншу, яка вам зручна.

vi /etc/nginx/nginx.conf

Давайте трохи розберемося в структурі самого файлу. Весь файл нагадує програмний код. У ньому є директиви. Вони поділяються на 2 типи:

Прості – рядок із операторами, що закінчується символом «;». Наприклад: pid/run/nginx.pid;
Блокові – директива, що містить додаткові параметри, поміщені у фігурні дужки {}.
Усередині фігурних дужок можна ставити інші директиви. У такому разі це буде називатися контекстом, а всі директиви, які знаходяться в конфігураційному файлі, але не укладені в жодні фігурні дужки - відносяться до глобального контексту або так званого контексту main.

Рядки позначені символом # є коментарями і не розглядаються в конфігурації.

Як бачите у файлі є директива:

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

Ця директива свідчить, що цей файл конфігурації включені все конфігураційні файли з каталогу /etc/nginx/sites-enabled/. Даний каталог, по суті, містить символічні посилання конфігурації віртуальних хостів (по суті сайтів, що обслуговуються на сервері).

Тепер нам необхідно налаштувати віртуальний хост, який відповідатиме за наш найпростіший ресурс (нехай це буде test.net). Для початку створимо директорію для нього. Зробимо це командою:

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

Тепер створимо в даному каталозі файл index.html приблизно такого змісту:

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

Тепер у нас є зміст сайту, нехай і одна сторінка всього. Для цього сайту необхідно створити віртуальний хост. Скопіюємо файл, що використовується за замовчуванням для віртуального хоста:

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

Далі відкриємо його для редагування. Директива listen має параметри для default_server. Тільки один блок можна встановлювати з цим значенням, воно означає, що даний блок обслуговуватиме запити, для яких не знайдено нічого більш подібного. Тому рядки

listen 80 default_server;
listen [::]:80 default_server;
потрібно видалити з цього файлу. Далі необхідно налаштувати кореневий каталог, в якому міститься вміст нашого сайту. Для цього пропишемо директиву root так:

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

Наступна директива index визначає файли, які будуть використовуватися як індексні. Порядок перевірки файлів відповідає порядку, вказаному в конфігураційному файлі. Цю директиву запишемо так:

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

Наступною директивою server_name вкажемо ім'я сервера. Як значення вкажемо доменне ім'я та псевдонім для випадку, коли доменне ім'я вказується з www префіксом.

server_name test.net <a href="http://www.test.net;
www.test.net;
<br>Далі залишається задати лише директиву location, яка встановлює конфігурацію сайту залежно від імені URI, вказаного у запиті. У нашому випадку вона виглядатиме просто:

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

Це говорить про те, що спочатку перевірятимуться файли, потім каталоги і якщо не буде знайдено нічого придатного, то буде видана відповідь Not Found (404).

Ось і все із конфігураційним файлом. Його підсумковий зміст – таке:

#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;<br> location / {
try_files $uri $uri/ =404;
}
}
Про всі інші директиви та їх значення можна почитати в офіційній документації nginx, яка знаходиться тут http://nginx.org/en/docs/.

Тепер ми маємо вміст сайту та його конфігураційний файл. Залишилося його увімкнути. Для цього створимо символічне посилання:

ln -s /etc/nginx/sites-available/test.net /etc/nginx/sites-enabled/
Перезапустити сервер, щоб зміни набули чинності:

/etc/init.d/nginx restart

Перевіримо роботу створеного ресурсу.

Для відкриття сторінки, можливо, на комп'ютері, з якого здійснюється перевірка, потрібно додати рядок у файл hosts:

xxx.xxx.xxx.xxx test.net
Де xxx.xxx.xxx.xxx – це IP-адреса сервера з встановленим Nginx. Файл hosts, знаходиться:

C:\Windows\System32\drivers\etc (у Win7);
/etc/hosts (Debian).
Ми встановили nginx та php5-fpm, а також зробили найпростіший сайт. Наступним кроком буде налаштування php та його застосування з nginx.

Для початку створимо на нашому віртуальному хості сторінку з кодом php. Зробимо файл /var/www/test.net/html/info.php наступного змісту:

<?php
phpinfo();
?>
Тепер відкриємо у браузері цю сторінку http://test.net/info.php. В результаті ми отримаємо наступне:

Але як же виконання php-коду? А php код у нас не виконався, тому що інтерпретатор php не налаштований на nginx. Давайте займемося цим.

Відкриємо конфігураційний файл /etc/nginx/sites-available/test.net. Додамо до нього наступну блокову директиву:

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;
}
Ця директива визначає параметри обробки запитів, що йдуть до php файлів. Не описуватиму кожен параметр і його значення. Цю інформацію можна знайти в офіційній документації тут http://nginx.org/en/docs/dirin...

Тепер наш файл конфігурації має такий вигляд:

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;
}
}
Збережемо зміни у файлі та перезапустимо наш сервер nginx.

/etc/init.d/nginx restart
Тепер спробуємо знову відкрити сторінку http://test.net/info.php. Результатом має бути наступний:

Я на скріншоті відзначив інформацію, яка свідчить про використання менеджера FPM.

По суті, найпростіше налаштування сервера nginx + php-fpm, на цьому завершено. Найпростіший сайт створений та налаштований на роботу з php.

Продовження дивіться в наступній статті про налаштування PHP-FPM