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 пытается использовать папку кеша без прав доступа:
- Убедитесь, что пользователь nginx может писать в /var/lib/nginx (или /var/cache/nginx в некоторых дистрибутивах).
- Убедитесь, что пользователь nginx может писать в папку (найдите форму пользователя nginx, файл конфигурации nginx обычно находится в /etc/nginx/nginx.conf)
- Дайте права доступа(
chown -R nginx:nginx /var/lib/nginx/
) - Перезагрузите сервис (-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;
}
Для меня решением было отключить кеш. Для контекста моя настройка предназначена для локальной разработки, а 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
Чтобы добавить еще одно решение в эту тему. я получал ошибку
proxy_read_timeout 24h;