Ми вже зібрали WordPress руками на Apache - з PHP-FPM, MariaDB і Redis. Але половина інтернету сидить на nginx, і резонне питання: а що як замість Apache хочу nginx? Відповідь коротка - міняється рівно одна річ: вебсервер. PHP-FPM, база, Redis, сам WordPress - усе лишається тим самим. Тому й пост короткий: дивимось тільки дельту.
Що потрібно зробити?#
Узяти вже готовий WordPress-стек на PHP-FPM і поставити перед ним nginx замість Apache. Весь фокус - в одному server-блоці: віддати статику напряму, а .php прокинути в сокет PHP-FPM. Жодного mod_php, жодного .htaccess - у nginx їх і нема.
З чим працюю?#
| |
Debian 13, PHP тут - 8.4. Решту стека - MariaDB з окремим юзером, PHP-FPM з розширеннями, Redis object cache і сам WordPress через WP-CLI - ставимо точно так, як у пості про Apache. Тут не повторюю: єдина відмінність - замість apache2 ставимо nginx і описуємо сайт по-своєму. Від root.
Крок 1. nginx#
Ставимо вебсервер. Apache при цьому бути не повинно - обидва слухають порт 80 і просто поб’ються за нього:
| |
Крок 2. Server block#
Ось вона, вся різниця між Apache і nginx. Замість <VirtualHost> - server-блок. Створюємо конфіг сайту:
| |
| |
Два рядки, де вся суть:
try_files $uri $uri/ /index.php?$args;- це nginx-аналог «гарних посилань». У Apache за них відповідав.htaccessзmod_rewrite; у nginx.htaccessнема взагалі, і цей рядок робить те саме: якщо файлу нема - віддай запит уindex.php, хай WordPress сам розрулить маршрут.fastcgi_pass unix:/run/php/php8.4-fpm.sock;- це прямий аналог тогоSetHandler "proxy:unix:...php-fpm.sock"з Apache. Саме він відправляє всі.phpу сокет PHP-FPM. Шлях до сокета - той самий, що й у конфізі Apache (під свою версію PHP підстав свою:ls /etc/php/).
Вмикаємо наш сайт і прибираємо дефолтний (щоб не віддавав сторінку-привітання nginx):
| |
Крок 3. Перевірка конфігу і перезапуск#
Спочатку синтаксис, потім перечитуємо:
| |
nginx -t - звичка, яку варто мати: він скаже syntax is ok / test is successful ще до того, як ти щось зламаєш наживо.
Дивимось#
| |
У першому виводі видно <title>Мій блог</title> - це вже WordPress, а не сторінка-привітання nginx. У другому - Server: nginx і заголовок Link: ...rel="https://api.w.org/": тобто фронт тепер nginx, а WordPress живий і відповідає через PHP-FPM. Усе, як у записі вище.
Різниця між Apache і nginx для WordPress - це один
server-блок:try_filesзамість.htaccessіfastcgi_passзамістьSetHandler. PHP-FPM, MariaDB і Redis навіть не помітять, що фронт змінився. А як зібрати весь стек з нуля - у пості про Apache.



