Від стабільної і швидкої роботи сервера залежить доля сайту. Його повільна робота і часті падіння здатні відлякати як відвідувачів, так і пошукові системи. Останні ще й знизять рейтинг гальмуючого сайту в результатах пошуку і він виявиться не в топ-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-пул для обслуживания запросов 1 Налаштовуємо php-пул для обслуговування запитів
- Обработка php скриптов посредством nginx 2 Обробка php скриптів за допомогою nginx
Налаштовуємо 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
зрраствуйте не виходить не знаходить example.com
Добрий день. Директиву root в конфіги httpd крапкою з комою закрити, напевно, слід .. а сам конфиг помістити в / etc / nginx / sites-enabled під іменем адреси сайту.
А навіщо створювати користувачів для кожного сайту окремо?
Що значить якщо зламають одного користувача, то інші сайти будуть в безпеці?
Чи потрібно мені створювати різних користувачів, якщо я працюю в системі тільки один, вхід в систему по SSH через сертифікат.
БД в Інтернет теж не дивиться.
Дякуємо.
«Залишається налаштувати nginx для роботи з php-fpm. Готовий конфиг »
а куди його вставити-то?