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", '')

Ответ 1

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

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

Ответ 2

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

server {
    ...

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

Ответ 3

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

Ответ 4

Для меня решением было разрешение proxy_max_temp_file_size

Ответ 5

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


Полная конфигурация

server {
        listen      0000; #//port give by your need
        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; 
        }

Ответ 6

Если прокси-сервер не может записывать в /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_temp_path

Ответ 7

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