Настройка Nginx и PHP-FPM
Настройте Nginx как обратный прокси для PHP-FPM при обслуживании приложений PHP
«Настройка Nginx и PHP-FPM» — бесплатный урок PHP Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Почему Nginx + PHP-FPM?
Nginx — это высокопроизводительный веб-сервер и обратный прокси-сервер. PHP-FPM (диспетчер процессов FastCGI) управляет пулом рабочих процессов PHP. Nginx передаёт запросы к PHP в FPM через FastCGI.
Базовый серверный блок Nginx
Минимальная конфигурация Nginx для приложения PHP.
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
root /srv/myapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}Директива try_files
try_files $uri $uri/ /index.php?$query_string сначала пытается отдать статический файл. Если файл не найден, используется index.php — это включает маршрутизацию через фронт-контроллер (Laravel, Symfony).
Конфигурация пула PHP-FPM
Настройте пул рабочих процессов в /etc/php/8.3/fpm/pool.d/www.conf.
[www]
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500 ; recycle workers to prevent leaksUnix-сокет и TCP
Использование Unix-сокета (fastcgi_pass unix:/run/php/php8.3-fpm.sock) для взаимодействия на одной машине быстрее, чем TCP (127.0.0.1:9000).
HTTPS с Let's Encrypt
Используйте Certbot, чтобы получить бесплатные сертификаты TLS.
$ certbot --nginx -d example.com
# Certbot modifies your Nginx config and sets up auto-renewalСжатие gzip
Включите сжатие gzip, чтобы уменьшить размеры ответов.
# nginx.conf or server block:
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_min_length 1024;Кэширование статических ресурсов в браузере
Добавьте заголовки управления кэшем для статических файлов.
location ~* \.(js|css|png|jpg|gif|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}Ограничение частоты запросов в Nginx
Ограничивайте количество запросов с одного IP с помощью модуля limit_req — это первая линия защиты ещё до запуска PHP.
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
}
}Заголовки безопасности
Добавьте заголовки безопасности ко всем ответам.
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";Перезагрузка и перезапуск
После изменения конфигурации Nginx выполните плавную перезагрузку без простоя: nginx -t && nginx -s reload. После изменения конфигурации PHP-FPM выполните: systemctl reload php8.3-fpm.
Итоги
Настройте Nginx с серверным блоком, который через FastCGI указывает на public/index.php. Настройте параметры пула PHP-FPM. Используйте Unix-сокеты. Включите HTTPS, gzip и кэширование статических файлов.
Быстрая проверка
Что делает try_files $uri $uri/ /index.php?$query_string?
Часто задаваемые вопросы
Урок «Настройка Nginx и PHP-FPM» бесплатный?
Да — полный текст урока «Настройка Nginx и PHP-FPM» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Настройка Nginx и PHP-FPM»?
Настройте Nginx как обратный прокси для PHP-FPM при обслуживании приложений PHP Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Настройка Nginx и PHP-FPM»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка Nginx и PHP-FPM
- Переменные окружения и файлы .env
- Развёртывание с GitHub Actions
- Контейнеризация приложения PHP