net::ERR_INCOMPLETE_CHUNKED_ENCODING nginx

У меня есть 2 веб-приложения RoR, размещенных на 2 разных серверах. Для одной конкретной страницы запрос подается из второго приложения. Для остальных страниц запрос подается из основного приложения. Настройки Nginx для основного приложения

location /customer/help/ {
            proxy_pass http://second-application:3020/help_and_support/;
}
location /assets/ {
            proxy_pass http://second-application:3020/assets/;
}

Это работало нормально до вчерашнего дня. Сейчас, /customer/help/ страница загружается неправильно. В Firefox он показывает пустую страницу, в Chrome он загружается частично и консоль показывает ошибку

net::ERR_INCOMPLETE_CHUNKED_ENCODING

После отладки я обнаружил, что проблема может быть связана с данными изображения, отправленными через API. Мое второе приложение вызывает API для получения изображений и отображает их на странице

<% url_with_binary_data = "data:image/" + "jpeg" + ";base64," + u.photo_url.to_s %>
<%= image_tag(url_with_binary_data, :class => "userpic")  %>

API-код для получения изображения

photo_url: Base64.encode64(u.photo.file.read).gsub("\n", '')

12 ответов

Возможно, вы захотите проверить, владеет ли пользователь, работающий с Nginx, каталогом. /var/lib/nginx,

Я узнал, что когда вы даете слишком большой ответ для Nginx, он использует этот каталог для записи в качестве рабочего каталога для временных файлов. Если рабочий процесс не может получить к нему доступ, Nginx прекратит передачу, прежде чем завершит, таким образом, ошибка INCOMPLETE_CHUNKED_ENCODING.

Столкнулся с этой проблемой на AWS и обнаружил, что добавление нескольких директив proxy_buffer в файл конфигурации сайта устранило проблемы:

server {
    ...

    location / {
        ...
        proxy_buffers 8 1024k;  
        proxy_buffer_size 1024k;
    }
}

Для меня решение было то, что рекомендовал DfKimer, но вместо /var/lib/nginx это было /var/cache/nginx,

Я получил эту ошибку из-за переполнения памяти сервера. надеюсь, что это поможет кому-нибудь в будущем.

100% рабочее решение для веб-сервера php и nginx

Проблема => net::ERR_INCOMPLETE_CHUNKED_ENCODING nginx

Шаг 1. Откройте /etc/php/7.2/fpm/pool.d [выберите папку php, в моем случае я использую php 7.2]

Шаг 2: отредактируйте файл www.conf внутри папки pool.d

В моем случае это выглядит так =>

[inet]
user = www-data
group = www-data

listen = 127.0.0.1:9999
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 5

pm.status_path = /status
ping.path = /ping

request_terminate_timeout = 10s
request_slowlog_timeout = 10s

;
; Log files
;
access.log = /var/log/php-fpm/php-fpm.log
slowlog = /var/log/php-fpm/slow.log

Шаг 3. Измените значение request_terminate_timeout = 10s (в любое время, которое вы хотите)

request_terminate_timeout = 300s

Шаг 4: Теперь сохраните и перезапустите php-fpm (в моем случае я использую php7.2, поэтому cmd будет)

sudo service php7.2-fpm restart

Теперь вы можете выполнить свой скрипт, он будет работать и завершится через 300 секунд.

Теперь еще кое-что добавим еще одну строку синтаксиса fastcgi_read_timeout 300; внутри файла nginx.conf или файла.conf вашего веб-сайта [вот код]

user www-data;
worker_processes 1;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http { 
include /etc/nginx/conf-enabled/*.conf;
include /etc/nginx/sites-enabled/*.conf;    
}

После добавления fastcgi_read_timeout 300; это будет выглядеть так

user www-data;
worker_processes 1;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http { 
include /etc/nginx/conf-enabled/*.conf;
include /etc/nginx/sites-enabled/*.conf;
fastcgi_read_timeout 300; 
}

Теперь перезагрузите nginx и перезапустите php-fpm, выполнив команду cmd.

sudo service php7.2-fpm reload
sudo service nginx reload

Примечание: фрагмент кода запущен и протестирован мной, пожалуйста, дайте мне знать, если вы не можете решить свою проблему с помощью моего ответа

Эта ошибка возникает из-за того, что nginx пытается использовать папку кеша без прав доступа:

  1. Убедитесь, что пользователь nginx может писать в /var/lib/nginx (или /var/cache/nginx в некоторых дистрибутивах).
  2. Убедитесь, что пользователь nginx может писать в папку (найдите форму пользователя nginx, файл конфигурации nginx обычно находится в /etc/nginx/nginx.conf)
  3. Дайте права доступа( chown -R nginx:nginx /var/lib/nginx/)
  4. Перезагрузите сервис (-service nginx reload -in centos)

proxy_set_header Keep-alive соединения;


Сервер полной конфигурации {прослушать 0000; #// порт по вашей необходимости server_name aa.com; proxy_buffers 16 4k; proxy_buffer_size 2k;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;
    location ~ ^/hello/{
        proxy_buffering off;
        proxy_pass http://127.0.0.1:1111; #//port give by your need
        proxy_redirect     off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Connection keep-alive; 
    }

Для меня решение было включить proxy_max_temp_file_size

Для меня решением было отключить кеш. Для контекста моя настройка предназначена для локальной разработки, а nginx используется в качестве обратного прокси-сервера для сопоставления доменов в основном.

      location / {
  proxy_pass http://localhost:3000;

  # don't cache it
  proxy_no_cache 1;
  # even if cached, don't try to use it
  proxy_cache_bypass 1;
}

Основная причина проблем была связана сtimedoutпроблемы. Итак, решение, которое работает для меня, состояло в том, чтобы увеличить значение следующихnginxблокируйте по вашему желанию за считанные секунды.

      http {
  ...
  send_timeout 200; # 200 seconds
  ...
}

Если прокси-сервер не может писать в /var/lib/nginxВам не нужно играть с правами доступа к файлам или владением этим каталогом. Вы можете изменить каталог кеша nginx для контекста:

proxy_temp_path /home/emre/projects/frontend/nginx_temp 1 2;

внутри http, server или же location контексты nginx.conf файл.

проверьте http://nginx.org/en/docs/http/ngx_http_proxy_module.html

Чтобы добавить еще одно решение в эту тему. я получал ошибкуиз Nginx после использования SSE, но он работал нормально, если я обращался к серверу напрямую. Причина заключалась в том, что у Nginx был тайм-аут чтения в течение 60 секунд. Его можно переопределить с помощью директивы proxy_read_timeout, как показано ниже, чтобы, например, сделать его равным 24 часам:

      proxy_read_timeout 24h;
Другие вопросы по тегам