NEW CASE
Кейс «Адвокат Ільїчов Сергій Дмитрович» — сайт-візитка адвокатської діяльності

Створюємо цифрові рішення, які працюють на бізнес


Зателефонуйте нам +38 (066) 35-14-529

Зробімо перший крок до вашого сайту — напишіть нам

Закрити
BB STUDIO 8 хв читання
Оновлено:

Apache чи Nginx + PHP-FPM: який режим PHP обрати для сайту на хостингу

Хостинг і технічне
Apache чи Nginx + PHP-FPM: який режим PHP обрати для сайту на хостингу

У панелі хостингу поруч із версією PHP часто є ще одне налаштування — режим роботи PHP: «модуль Apache» або «FastCGI (Nginx + PHP-FPM)». Обидва варіанти робочі, і сайт відкриється в будь-якому з них. Але від вибору залежить, чи працюватимуть правила з файлу .htaccess, як сайт поводиться під навантаженням і що доведеться налаштувати під час переїзду.

Пояснюємо різницю без зайвої теорії: як працює кожен режим, що буде з .htaccess, коли вмикати модуль PageSpeed і що обрати для WordPress, Joomla, Drupal, PrestaShop, OpenCart і 1С-Бітрікс.

Коротка відповідь

Якщо сайт спирається на .htaccess — а так влаштована більшість CMS, — модуль Apache найбезпечніший під час переїзду: ЧПУ, редиректи й захист папок працюють як раніше. Nginx + PHP-FPM витрачає менше ресурсів на кожен запит і стабільніше тримає піки трафіку, але .htaccess ігнорує: правила треба перенести в конфігурацію Nginx.

Практичний підхід: переїхати в режимі Apache, переконатися, що все працює, а потім за потреби перейти на Nginx + PHP-FPM, перенісши правила й перевіривши редиректи.

Як працює кожен режим

Модуль Apache

PHP працює всередині вебсервера Apache як його модуль. На більшості сучасних хостингів перед Apache стоїть Nginx: він сам віддає статичні файли — зображення, CSS, JavaScript, — а запити до PHP передає Apache. Apache під час кожного запиту читає файли .htaccess у папках сайту, тож будь-які правила можна змінити, просто відредагувавши файл.

FastCGI: Nginx + PHP-FPM

Nginx обробляє всі запити сам, а PHP-код виконує окремий пул процесів PHP-FPM через протокол FastCGI. Apache в цій схемі немає взагалі, тому й .htaccess ніхто не читає: правила маршрутизації, редиректи й заборони описують у конфігурації Nginx. Зате кожен запит обходиться дешевше, а під навантаженням сервер поводиться передбачуваніше.

Порівняння режимів

Критерій Модуль Apache Nginx + PHP-FPM
Файли .htaccess працюють ігноруються, правила переносять у конфігурацію Nginx
Віддача статики швидко, якщо спереду стоїть Nginx швидко
Памʼять і піки трафіку більше ресурсів на запит економніше, стабільніше під навантаженням
Налаштування PHP для сайту панель хостингу або директиви в .htaccess панель хостингу або файл .user.ini
Переїзд старого сайту без змін у правилах правила треба адаптувати
Кому підходить більшості сайтів на CMS, особливо під час переїзду магазинам і сайтам із великим трафіком, коли правила вже перенесені

Що робить .htaccess і що перестане працювати на Nginx

Файл .htaccess — це набір інструкцій для Apache, який CMS зазвичай кладе в корінь сайту. На Nginx без перенесення перестануть працювати:

  • ЧПУ — правило, яке передає всі «красиві» адреси на index.php. Без нього внутрішні сторінки віддають 404;
  • редиректи — з http на https, з www на адресу без www, зі старих URL на нові;
  • захист службових файлів і папок — конфігурацій, логів, резервних копій, які не повинні відкриватися з браузера;
  • парольний доступ до адмінки чи тестової копії через .htpasswd;
  • заголовки кешування й безпеки, а також стиснення;
  • директиви PHP на кшталт php_value memory_limit — у режимі PHP-FPM їх задають у панелі або в .user.ini.

Після будь-якої зміни режиму перевірте редиректи: зручно це робити інструментом перевірки редиректів, а заголовки безпеки — перевіркою заголовків.

Як виглядають правила для Nginx

Для більшості CMS базове правило ЧПУ в Nginx — одна директива. Для WordPress і Joomla воно виглядає так:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Для Drupal — майже так само, але без перевірки каталогів ($uri/):

location / {
    try_files $uri /index.php?$query_string;
}

Для 1С-Бітрікс запити, яким не відповідає жоден файл, передають на /bitrix/urlrewrite.php (спрощено):

location / {
    try_files $uri $uri/ @bitrix;
}
location @bitrix {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
    fastcgi_pass php-fpm;
}

А заборона доступу до прихованих службових файлів, крім папки .well-known для SSL-сертифікатів, — так:

location ~ /\.(?!well-known) {
    deny all;
}

PrestaShop і OpenCart мають довші набори правил — для зображень товарів, ЧПУ категорій і захисту службових папок, — а точні правила залежать від версії та модулів. На віртуальному хостингу конфігурацію Nginx зазвичай змінює підтримка: на нашому хостингу ці правила під ваш сайт налаштовуємо ми.

Модуль PageSpeed: коли вмикати

PageSpeed — модуль вебсервера, який оптимізує сторінки «на льоту»: мініфікує й обʼєднує CSS і JavaScript, перестискає зображення, може конвертувати їх у WebP і додавати відкладене завантаження. Для старого сайту без сучасного збирання фронтенду це швидкий спосіб зменшити вагу сторінок без правок у коді.

Але є й нюанси:

  • перші запити після змін обробляються повільніше, поки модуль готує оптимізовані версії файлів;
  • він може конфліктувати з плагінами оптимізації в самій CMS: подвійна мініфікація й обʼєднання часто ламають скрипти;
  • деякі теми й конструктори сторінок після обʼєднання JavaScript працюють з помилками;
  • сам модуль давно не отримує великих оновлень, тому вмикати його варто точково й після перевірки.

Правильний порядок: спершу виміряти швидкість, потім увімкнути PageSpeed на копії або в спокійний час, перевірити сторінки й форми, виміряти ще раз — аудитом швидкості чи за методикою зі статті про TTFB і Core Web Vitals. Залишайте модуль, лише якщо результат кращий.

OPcache працює в обох режимах

Кешування байт-коду OPcache не залежить від режиму: і модуль Apache, і PHP-FPM тримають скомпільований PHP-код у памʼяті, тож CMS не перекомпільовує свої файли під час кожного запиту. Перевірте, що OPcache увімкнений для вашої версії PHP, — це один із найдешевших способів зменшити час відповіді сервера.

Що обрати для своєї CMS

Платформа Модуль Apache Nginx + PHP-FPM
WordPress найпростіше під час переїзду хороший вибір: правило ЧПУ просте, плагіни кешу працюють
Joomla достатньо перейменувати htaccess.txt на .htaccess після перенесення правил ЧПУ й захисту
Drupal власний .htaccess Drupal працює одразу з рекомендованими правилами для Drupal
PrestaShop .htaccess генерує сам PrestaShop для навантажених магазинів, правила складніші
OpenCart достатньо перейменувати .htaccess.txt на .htaccess після налаштування правил для SEO-адрес
1С-Бітрікс найпростіший і найпоширеніший варіант через правила для urlrewrite.php
Laravel і власні PHP-проєкти працює з .htaccess у папці public природний вибір: корінь сайту — папка public

На нашому хостингу режим PHP обирається для кожного сайту окремо, разом із версією PHP від 5.6 до 8.5. Під конкретні платформи є окремі сторінки: WordPress, Joomla, Drupal, PrestaShop, 1С-Бітрікс і Laravel та PHP.

Як безпечно змінити режим PHP

  1. Зробіть резервну копію файлів і бази.
  2. Знайдіть усі файли .htaccess на сайті — не лише в корені, а й у вкладених папках.
  3. Перенесіть правила в конфігурацію Nginx, а директиви PHP — у налаштування панелі або .user.ini.
  4. Перемкніть режим на копії сайту або в години з мінімальним трафіком.
  5. Перевірте внутрішні сторінки, редиректи з http і www, адмінку, форми, кошик і закриті папки.
  6. Якщо щось не так, поверніть попередній режим — на хостингу з вибором режиму це займає хвилину — і вже потім шукайте причину.

Висновок

Модуль Apache — найсумісніший режим: правила .htaccess працюють, і переїзд проходить без сюрпризів. Nginx + PHP-FPM — швидший і економніший, але вимагає перенести правила в конфігурацію. PageSpeed — корисний інструмент для старих сайтів, якщо вмикати його обережно й вимірювати результат. А версію PHP для своєї CMS підкаже наша таблиця сумісності PHP.

Якщо не хочеться розбиратися з правилами Nginx самостійно, напишіть BB STUDIO: перенесемо сайт на наш хостинг безкоштовно, оберемо режим і налаштуємо правила під ваш сайт.

Часті питання

Під навантаженням зазвичай швидший Nginx + PHP-FPM. Але для невеликого сайту виграш від зміни режиму часто менший, ніж від OPcache, кешу сторінок чи оптимізованих зображень. Тому спершу наведіть лад у цьому, а режим міняйте, коли правила вже перенесені.

Ні. Nginx не читає файли .htaccess: усі правила — ЧПУ, редиректи, заборони доступу — треба описати в його конфігурації. Саме тому після перемикання на Nginx без перенесення правил внутрішні сторінки часто віддають 404.

Для переїзду — модуль Apache: усе працює без змін. Для постійної роботи підходять обидва режими; Nginx + PHP-FPM вигідніший для сайтів із великим трафіком, а правило ЧПУ для WordPress у ньому — один рядок.

PHP-FPM — це менеджер процесів PHP, який працює окремо від вебсервера й отримує запити через протокол FastCGI. Він тримає пул готових процесів, гнучко керує їхньою кількістю і дає змогу задавати налаштування PHP окремо для кожного сайту.

Так, якщо правила перенесені заздалегідь і перевірені на копії. Саме перемикання в панелі займає секунди, а якщо щось піде не так, попередній режим так само швидко повертається.
Оцініть статтю
Це допомагає нам писати кращі матеріали
Будьте першим, хто оцінить 5.0 з 5 0 голосів
Поділитися статтею:

Схожі статті

Давайте разом створимо щось дивовижне

Стати клієнтомСтати клієнтом
Telegram Viber Подзвонити