Как правильно настроить nginx для оптимизации его производительности?

Я перехожу с OpenServer на Docker и столкнулся с проблемой: сайт на nginx загружается на 1 секунду дольше, чем на OpenServer. Подскажите, требуется ли дополнительная настройка для nginx, чтобы улучшить производительность? <br/> <br/> В данный момент я не вношу никаких изменений в файл Dockerfile, в нем только строка "FROM nginx". <br/> В файле "nginx.conf" содержится следующий код: <br/> <pre><code>server {
    listen       443 ssl;
    server_name  localhost;
    root         /var/www/html;

    ssl_certificate /localhost.crt;
    ssl_certificate_key /localhost.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }
}</code></pre> <br/> Может быть, задержка связана с тем, что nginx перенаправляет запросы к PHP?
  • 12 февраля 2025 г. 19:04
Ответы на вопрос 2
Переход с OpenServer на Docker может потребовать некоторых изменений в настройках для достижения аналогичной производительности. Есть несколько вопросов, которые стоит рассмотреть для улучшения производительности вашего Nginx-сервера в Docker:

### 1. Настройка кэширования

Добавьте кэширование в конфигурацию Nginx, чтобы снизить нагрузку на сервер и ускорить время ответа:

```nginx
location / {
    index index.php index.html;
    try_files $uri $uri/ /index.php?$args;
    expires 30d;  # Кэширование статического контента
}
```

### 2. Оптимизация параметров работы с PHP-FPM

Убедитесь, что конфигурация PHP-FPM оптимизирована. В `php-fpm.conf` (или `www.conf`) настроьте следующие параметры:

- `pm.max_children` — максимальное количество процессов PHP.
- `pm.start_servers`, `pm.min_spare_servers`, `pm.max_spare_servers` — настройте количество запущенных процессов в зависимости от нагрузки.

Это поможет избежать задержек при обработке запросов к PHP.

### 3. Использование gzip-сжатия

Включите сжатие для уменьшения размера передаваемых данных:

```nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
```

### 4. Убедитесь в правильной связи между контейнерами

Если PHP работает в отдельном контейнере, убедитесь, что между контейнерами установлено быстрое соединение. Например, используйте Docker Compose и убедитесь, что контейнеры находятся в одной сети.

### 5. Проверьте использование SSD

Если вы работаете на виртуальной машине, удостоверьтесь, что использовались SSD, так как это существенно влияет на время ответа.

### 6. Профилирование производительности

Используйте инструменты профилирования, такие как `New Relic` или `Blackfire`, чтобы идентифицировать узкие места выполнения.

### 7. Подбор правильного уровня оптимизации

Иногда можно улучшить общую производительность, изменив уровень оптимизации для компиляции PHP (если вы используете расширения). Убедитесь, что используете сборку с оптимальными флагами.

### 8. Резервная копия конфигурации

Сохраняйте оригинальную конфигурацию перед внесением изменений. Это поможет вернуть настройки к прежнему состоянию при необходимости.

### Пример более полной конфигурации Nginx

Вот пример, как может выглядеть более оптимизированная конфигурация:

```nginx
server {
    listen       443 ssl;
    server_name  localhost;
    root         /var/www/html;

    ssl_certificate /localhost.crt;
    ssl_certificate_key /localhost.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
        expires 30d;  # Кэширование
        gzip on;       # Сжатие
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }

    # Статические файлы
    location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
        expires 30d;
        access_log off;
        add_header Pragma public;
        add_header Cache-Control "public";
    }
}
```

После внесения изменений не забудьте перезапустить Nginx внутри вашего Docker-контейнера, чтобы они вступили в силу:

```bash
docker exec -it <container_id> nginx -s reload
```

Следуя этим рекомендациям, вы сможете значительно улучшить производительность вашего сайта на Nginx в Docker.
Я бы не грешил на нгинкс/пхп 
У меня аналогичные конфигурации php8.*-php + nginx под Дебианом свежим - точно тут не тормозит.
Мускул да, может, но про него речь пока не шла?
Я бы с порта переключился на сокет php , ну и логи глянул, может там что обнаружится..
Ну и одно ядро под вопросом...всегда стараюсь два хотя бы использовать:)
Похожие вопросы