← Назад к вопросам

Как настраивать nginx?

2.0 Middle🔥 201 комментариев
#Инфраструктура и DevOps

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Настройка Nginx для PHP Backend: основные принципы и практические примеры

Настройка Nginx для PHP-приложений — критически важный навык backend-разработчика. В отличие от Apache с его mod_php, Nginx работает как обратный прокси, передавая PHP-обработку внешнему процессу (обычно PHP-FPM). Это обеспечивает лучшую производительность и стабильность под нагрузкой.

Основные этапы настройки

1. Базовая структура конфигурации

Конфиги Nginx обычно находятся в /etc/nginx/. Основные части:

  • nginx.conf — главный конфигурационный файл
  • sites-available/ — доступные конфигурации сайтов
  • sites-enabled/ — активные конфигурации (симлинки на sites-available)
  • conf.d/ — дополнительные конфигурационные файлы

Пример базовой структуры server-блока для PHP:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/project/public;
    index index.php index.html;

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

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

2. Настройка взаимодействия с PHP-FPM

Ключевой аспект — правильная передача запросов PHP-FPM:

location ~ \.php$ {
    # Используем socket (быстрее) или tcp-соединение
    fastcgi_pass unix:/run/php/php-fpm.sock;
    
    # Альтернатива для TCP:
    # fastcgi_pass 127.0.0.1:9000;
    
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    
    # Важные параметры безопасности и производительности
    fastcgi_read_timeout 300;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    
    include fastcgi_params;
}

3. Безопасность и оптимизация

Защита чувствительных файлов:

location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

location ~ ^/(config|storage|vendor|node_modules)/ {
    deny all;
}

location ~* \.(env|log|sql|gitignore|md)$ {
    deny all;
}

Оптимизация статических файлов:

location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
    access_log off;
}

4. Продвинутые сценарии

Обработка ошибок и кастомные страницы:

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location = /50x.html {
    root /usr/share/nginx/html;
    internal;
}

Настройка для Laravel/Symfony (публичная папка):

server {
    listen 80;
    server_name api.project.com;
    root /var/www/project/public;
    
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # Запрет доступа к .env
    location ~ /\.env {
        deny all;
    }
}

Балансировка нагрузки между несколькими PHP-FPM серверами:

upstream php_servers {
    server 10.0.0.1:9000 weight=3;
    server 10.0.0.2:9000;
    server 10.0.0.3:9000;
    keepalive 32;
}

server {
    # ...
    location ~ \.php$ {
        fastcgi_pass php_servers;
        # остальные директивы
    }
}

5. Производительность и кэширование

Кэширование FastCGI:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHP_CACHE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

location ~ \.php$ {
    fastcgi_cache PHP_CACHE;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_valid 404 1m;
    fastcgi_cache_use_stale error timeout updating invalid_header http_500;
    add_header X-Cache $upstream_cache_status;
}

6. Проверка и отладка

Всегда проверяйте конфигурацию перед применением:

# Проверка синтаксиса
nginx -t

# Проверка конкретного конфига
nginx -t -c /etc/nginx/sites-available/my-site.conf

# Перезагрузка конфигурации
nginx -s reload

# Просмотр логов
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

Рекомендации по безопасности:

  1. Минимизация привилегий — запуск от отдельного пользователя
  2. Ограничение директив — запрет ненужных методов HTTP
  3. HTTP/2 и SSL — обязательное использование HTTPS
  4. Заголовки безопасности — HSTS, CSP, CORS
  5. Лимиты запросов — защита от DDoS и brute-force

Правильная настройка Nginx требует понимания архитектуры вашего приложения. Для высоконагруженных проектов обязательно используйте кеширование, балансировку нагрузки и мониторинг метрик производительности. Помните, что Nginx — это не просто веб-сервер, а полноценный обратный прокси и инструмент для решения сложных задач маршрутизации и оптимизации.

Как настраивать nginx? | PrepBro