Конфигурация nginx
Директивы nginx
worker_processes auto ;
worker_priority -2 ;
worker_connections 1024 ;
worker_processes - по умолчанию равен 1, в автоматическом режиме кол-во зависит от кол-ва ядер процессора, следует использовать значение auto
worker_priority - приоритет рабочих процессов, от -20 до 20, чем ниже, тем больше приоритет, более высокий приоритет следует отдавать при сильной нагрузке на скрипты сайта или ddos
worker_connections - число возможных соединений ( рабочих процессов ), остальные процессы будут ждать своей очереди
Использование proxy server
location / {
proxy_pass http://localhost:8080/;
}
Настройка проксирования FastCGI:
fastcgi_pass вместо директивы proxy_pass
fastcgi_pass unix: | host | ip
Например:
fastcgi_pass unix:/tmp/fastcgi.socket;
fastcgi_pass localhost:9000;
fastcgi_pass 192.168.1.1:9000;
fastcgi_param это параметры которые передаются fastcgi серверу:
Простые директивы заканчиваются точкой с запятой ;
Другие директивы действуют как контейнеры, называемые блоками
Файлы конфигурации разделены на файлы и храниться в /etc/nginx/conf.d и использоваться с помощью директивы include
Настройки timeout
fastcgi_read_timeout - fastcgi_read_timeout — директива веб-сервера Nginx, которая задаёт количество секунд ожидания ответа от FastCGI-сервера
proxy_read_timeout - определяет, как долго Nginx ожидает ответа от вышестоящего сервера
proxy_connect_timeout - устанавливает время ожидания Nginx при подключении к вышестоящему серверу
proxy_send_timeout - устанавливает время ожидания Nginx при отправке запроса на вышестоящий сервер
Нельзя забывать про настройки производительности вышестоящего сервера, в данном случае речь идет о настройках php и postgresql
Это может включать в себя ускорение запросов к базе данных, кэширование данных или добавление дополнительных ресурсов сервера для обработки более высоких нагрузок.
Можно использовать кэширование кодов операций для PHP, улучшить код своего приложения и более эффективно разрабатывать API
Альтернативным решением будет настройка параметра keepalive_timeout, который может помочь уменьшить количество ошибок, связанных с тайм-аутом. Этот параметр определяет, как долго Nginx будет поддерживать открытые соединения в режиме ожидания
Значение keepalive_timeout должно быть сбалансированным. Слишком высокое значение может привести к большому количеству неиспользуемых соединений, что использует ресурсы сервера.
Слишком низкое значение может привести к открытию большего числа соединений для каждого запроса, что увеличит накладные расходы.
Использование proxy_http_version 1.1 и proxy_set_header помогает поддерживать соединения между Nginx и вышестоящими серверами.
proxy_http_version 1.1;
proxy_set_header Connection "";
Эти настройки позволяют Nginx повторно использовать соединения, сокращая количество создаваемых новых соединений и, возможно, уменьшая количество ошибок, связанных с тайм-аутом
send_timeout - определяет, сколько времени сервер будет ждать, пока клиент отправит весь запрос
client_body_timeout - определяет время ожидания тела запроса от клиента. Если в течение этого времени клиент не передаёт данные, соединение разрывается с ошибкой 408 (Request Time-out)
Чтобы понять к какой директиве относится ошибка, стоит обратить какой вышестоящий сервер упомянут в ошибке, например прокси upstream: "http://my-awesome-proxy" или fastcgi upstream: "fastcgi://127.0.0.1:9000"
Источник 1: https://www.uptimia.com/questions/how-to-solve-110-connection-timed-out-while-reading-response-header-from-upstream-nginx-error#:~:text=The%20%22(110%3A%20Connection%20timed%20out),website%20when%20this%20error%20occurs
Источник 2:
Часто встречаемые ошибки в логах NGINX
Operation timed out
upstream timed out (110: Operation timed out) while reading response header from upstream, client: 192.168.***.***, server: *************.ru, request: "GET **********:197 HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fastcgi.sock", host:
При возникновении этой ошибки пользователи могут наблюдать медленную загрузку страниц или не иметь доступа к некоторым частям веб-сайта.
Решением данной проблемы может стать настройка параметров тайм-аута Nginx
Чаще всего проблему решают изменение значения директив: proxy_read_timeout, fastcgi_read_timeout
Тайм-ауты 502/504 «Неверный шлюз» обычно связаны с тем, что Nginx ожидает ответа PHP-FPM, а PHP-FPM перегружен или не справляется с запросами, поэтому может потребоваться настройка значений PHP-FPM