Как выполнить базовую настройку веб-сервера Nginx для PHP-приложения?

«Как выполнить базовую настройку веб-сервера Nginx для PHP-приложения?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Базовая настройка Nginx для работы с PHP через PHP-FPM заключается в правильной конфигурации server-блока и передачи PHP-скриптов FastCGI-процессу.

1. Структура конфигурации (Debian/Ubuntu):

  • Основной конфиг: /etc/nginx/nginx.conf (глобальные настройки: worker_processes, events, http-блок).
  • Конфиги сайтов: /etc/nginx/sites-available/. Активируются через симлинк в /etc/nginx/sites-enabled/.

2. Пример конфигурации сервера для PHP (/etc/nginx/sites-available/myapp):

server {
    listen 80;
    # Укажите ваши домены
    server_name myapp.local www.myapp.local;
    # Корневая директория проекта (часто 'public' для фреймворков)
    root /var/www/myapp/public;
    index index.php index.html index.htm;

    # Обработка статических файлов
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Обработка PHP-файлов
    location ~ .php$ {
        # Стандартные FastCGI параметры
        include snippets/fastcgi-php.conf;
        # Адрес сокета или TCP-порта PHP-FPM пула
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        # Или для TCP: fastcgi_pass 127.0.0.1:9000;
    }

    # Запрет доступа к скрытым файлам (например, .env, .git)
    location ~ /. {
        deny all;
    }

    # Логирование
    access_log /var/log/nginx/myapp_access.log;
    error_log /var/log/nginx/myapp_error.log;
}

3. Ключевые директивы:

  • try_files: Проверяет существование запрошенного URI как файла или директории, и если их нет, перенаправляет запрос на index.php (паттерн front-controller).
  • fastcgi_pass: Самая важная директива, указывающая Nginx, куда передавать PHP-запросы. Должна совпадать с настройками listen в пуле PHP-FPM (файл /etc/php/8.2/fpm/pool.d/www.conf).
  • include snippets/fastcgi-php.conf: Подключает стандартный набор параметров FastCGI (переменные SCRIPT_FILENAME, PATH_INFO и др.).

4. Активация и проверка:

# Создать симлинк для активации сайта
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# Проверить синтаксис конфигурации
sudo nginx -t
# Применить изменения
sudo systemctl reload nginx