Skip to main content

Установка php-fpm і nginx на Debian 8



Від стабільної і швидкої роботи сервера залежить доля сайту. Його повільна робота і часті падіння здатні відлякати як відвідувачів, так і пошукові системи. Останні ще й знизять рейтинг гальмуючого сайту в результатах пошуку і він виявиться не в топ-10, а, скажімо, в топ-100 по всім запитам.

Використання зв'язки nginx і php-fpm для обслуговування сайтів дозволяє збільшити швидкість їх роботи, а також стабільність системи в цілому. До того ж, відмовившись від використання apache, ми кілька спрощуємо систему і навіть захищаємо її. Адже якщо немає apache, то зловмисник не зможе використовувати, наприклад, файл .htaccess для своїх цілей.



Зв'язку nginx + php-fpm налаштовувати досить легко і вона підтримується багатьма популярними CMS: WordPress, MODX, DLE, різними фреймворками. Все це здатне працювати і без громіздкого apache.

При установці веб-сервера, не обійтися без створення користувачів. В ідеалі, для кожного сайту повинен бути створений окремий юзер. Так ми зможемо захистити інші сайти, якщо один з користувачів буде зламаний. Приклади в цій статті написані з урахуванням того, що користувачів ви створили по інструкції .



Для початку встановимо базові модулі: php-fpm, mysql, curl, GD. Все інше - за індивідуальною необхідності.

  # Aptitude install nginx php5-fpm php5-mysqlnd php5-curl php5-gd 

Файли розміщуються в каталозі / etc / php5 / fpm /.

Зміст статті:

Налаштовуємо php-пул для обслуговування запитів

Спочатку в php-fpm є тільки один пул по імені www. Ми будемо використовувати його в якості основи для інших пулів.



Відкриємо конфігураційний файл /etc/php5/fpm/pool.d/www.conf, розглянемо деякі змінні і підберемо для них значення.

Перша змінна - це ім'я пулу. Воно полягає в квадратні дужки і не може збігатися з ім'ям будь-якого існуючого в системі користувача.

[www]

Далі вказуємо ім'я користувача і його групу, в чиєму домашньому каталозі розташовується сайт.

  user = username
 group = www-data 

Зазначаємо, що пул повинен працювати як unix-сокета. Змінна $ pool буде замінена на ім'я.

listen = /var/run/php-$pool.sock

Визначаємо використання статичного режиму, при якому під час запуску fpm створюється певна кількість процесів пулу. Вони обслуговують всі запити.

pm = static

Чому саме такий вибір? :) Це найекономніший варіант. Кожен процес пулу буде займати об'єм оперативної пам'яті, виділений змінної memory_limit плюс кілька мегабайт на підключені модулі, кеш і т.п. При статичному варіанті всі запити будуть оброблятися тільки створеними процесами, а нові породжуватися (і займати дорогоцінну пам'ять) не будуть. В результаті отримаємо фіксоване споживання пам'яті.

Вказуємо необхідну кількість процесів, які обслуговують запити. Підбирається в залежності від завантаженості.

pm.max_children = 3

Наступні параметри рекомендую додати в кінець конфігураційного файлу пулу.

Каталог для розміщення тимчасових файлів:

  php_admin_value [upload_tmp_dir] = "/ var / www / username / tmp" 

Каталог для зберігання файлів сесій:

  php_admin_value [session.save_path] = "/ var / www / username / sessions" 

З міркувань безпеки, доступ до цих каталогів повинен бути тільки у користувача, з правами якого запускається пул php-fpm. Також не слід використовувати один каталог і для зберігання файлів сесій, і для тимчасових файлів.

Обмеження пам'яті для виконання скриптів слід підбирати, виходячи з вимог сайту. Для початку:

  php_admin_value [memory_limit] = 50M 

Вкажіть обов'язковий параметр, який усуває вразливість :

  php_admin_value [cgi.fix_pathinfo] = 0 

Змінні sendmail_path і open_basedir не вказуються спеціально. Вони будуть передані в якості параметрів fast-cgi в конфігураційному файлі nginx. Таким чином, для кожного конкретного сайту можна визначити свою настройку. :)

Після того, як всі необхідні параметри прописані, слід перезавантажити конфігурацію php-fpm командою:

  # Service php5-fpm reload 

Обробка php скриптів за допомогою nginx

Залишається налаштувати nginx для роботи з php-fpm. готовий конфиг

  server {
  server_name example.com;
  listen 80;
  access_log / var / log / nginx / example.com .access.log;
  error_log / var / log / nginx / example.com .error.log;
  charset utf-8;
  index index.php;
  root / var / www
  location / {
   try_files $ uri $ uri / /index.php$args;
  }
  location ~ \ .php $ {
   try_files $ uri = 404;
   fastcgi_pass unix: /run/php-www.sock;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
   fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
   fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
  }
 } 

example.com замінюємо на свій домен.

Опис параметрів:

try_files $uri =404; відобразить помилку 404 в браузері користувача, замість повідомлення no input file specified, в разі, коли дана помилка має місце.

fastcgi_pass - шлях до сокета php-fpm.

  fastcgi_pass unix: /run/php-www.sock; 

Наступна змінна встановлює шлях до sendmail і параметр, який вказує адресу електропошти адміністратора сайту. Замініть mail@example.com на щось своє.

  fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com"; 

Перераховуємо каталоги для open_basedir: каталог з сайтом, каталог для збереження тимчасових файлів, каталог для файлів сесій.

  fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /"; 

Якщо потрібно передати кілька параметрів, до робити це слід так:

  fastcgi_param PHP_ADMIN_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com \ nopen_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /"; 

Як можна помітити, параметри розділяються за допомогою розриву рядків: \ n.

Зберігаємо всі виконані зміни і перезапускаємо nginx.

  # Service nginx reload 


Як ви оціните статтю?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 оцінок, середнє: 2,63 з 5)
Завантаження ...

” 4 Коментарі "Установка php-fpm і nginx на Debian 8"

  1. Добрий день. Директиву root в конфіги httpd крапкою з комою закрити, напевно, слід .. а сам конфиг помістити в / etc / nginx / sites-enabled під іменем адреси сайту.

  2. А навіщо створювати користувачів для кожного сайту окремо?
    Що значить якщо зламають одного користувача, то інші сайти будуть в безпеці?

    Чи потрібно мені створювати різних користувачів, якщо я працюю в системі тільки один, вхід в систему по SSH через сертифікат.
    БД в Інтернет теж не дивиться.

    Дякуємо.

Додати коментар

Ваш e-mail не буде опублікований.