Drupal 7 + Nginx + ошибка "upstream sent invalid Content-Length header"

Andy Wits Blog

Drupal 7 + Nginx + ошибка "upstream sent invalid Content-Length header"

На текущем сайте example.com под управлением Drupal 7 в error лог Nginx обнаружили 2 типа ошибок:

Ошибка, вызываемая неверным запросом ссылки: /sites/default/files/styles/news_thumb/public?itok=TDBjZ3_e

2024/09/22 01:24:54 [error] 140592#140592: *61167 
upstream sent invalid "Content-Length" 
header: "Content-Length: " while reading response header from upstream, 
client: 47.128.116.248, 
server: example.com, 
request: "GET /sites/default/files/styles/news_thumb/public?itok=TDBjZ3_e HTTP/2.0", 
upstream: "fastcgi://unix:/run/php/php7.4-fpm-example.com.sock:", 
host: "example.com", 
referrer: "https://example.com/en/news/some-new-message"

Фризы с вылетом в 500/502

2024/10/23 19:16:16 [error] 1182461#1182461: *573499 
connect() to unix:/run/php/php7.4-fpm-example.com.sock failed 
(11: Resource temporarily unavailable) while connecting to upstream, 
client: 154.213.195.169, 
server: example.com, 
request: "GET / HTTP/2.0", 
upstream: "fastcgi://unix:/run/php/php7.4-fpm-example.com.sock:", 
host: "example.com"

ссылки, которые нагуглил:
https://www.digitalocean.com/community...t-on-nginx
https://stackoverflow.com/questions/52...ed-11-r...
https://serverfault.com/questions/8434...ble-whi...

В логах недостаточно информации для того, чтобы понять что именно вызывает фризы. Перепробовал различные варианты, чтобы быстро решить проблемы (что нагуглил + предложения от ChatGPT).

Что НЕ помогает:

  • смена php74-fpm на php73-fpm
  • изменения параметров pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers ( в /etc/php/7.3/fpm/pool.d/lawstrust.com.conf )
  • увеличение net.core.somaxconn в /etc/sysctl.conf

Что в итоге помогло:

Хотя обычно считается, что работа через сокет надёжнее, в статье на DigitaloOcean указано:
In some cases, switching from a Unix socket to a TCP/IP socket for PHP-FPM can help, especially if you’re running into file descriptor limits.

--

В конфиге "/etc/php/7.4/fpm/pool.d/example.com.conf" прописал:

listen = 127.0.0.1:9003

В конфиге /home/user/conf/web/example.com/nginx.conf

fastcgi_pass 127.0.0.1:9003;

Также возникали такие ошибки:

2024/10/27 14:45:49 [alert] 347152#347152: *42845 
1024 worker_connections are not enough while connecting to upstream, 
client: 156.253.168.12, server: example.com, 
request: "GET / HTTP/2.0", upstream: "fastcgi://127.0.0.1:9003", 
host: "example.com"

Суть из лога: "1024 worker_connections are not enough while connecting to upstream"

Увеличил параметр worker_connections в конфиге: (Источник: https://stackoverflow.com/questions/56723449/nginx-error-1024-worker-connections-are-not-enough )

# Worker config
events {
        worker_connections 4096;
        use                epoll;
        multi_accept       on;
}

p.s. Важно помнить, что Hestia CP перезаписывает конфиг по шаблону и ставит опять сокет (при обновлении панели или при изменении каких-либо параметров конфигурации nginx через панель). Поэтому лучше сделать для такого сайта отдельные темплейты tpl и stpl.

Published on Oct 27 2024 at 1:00 pm
Time to read 2 minute(s)
Categories
  • System Administration

Contact me on