net :: ERR_INCOMPLETE_CHUNKED_ENCODING nginx

时间:2015-04-22 06:19:16

标签: ruby-on-rails google-chrome nginx

我在2台不同的服务器上托管了2个RoR Web应用程序。对于一个特定页面,请求从第二个应用程序提供。对于其余页面,请求由主应用程序提供。 主应用程序的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", '')

9 个答案:

答案 0 :(得分:19)

您可能想要检查运行Nginx工作线程的用户是否拥有目录/var/lib/nginx

我了解到,当您为Nginx提供过大的响应时,它会使用此目录作为临时文件的工作目录。如果工作进程无法访问它,Nginx将在传输完成之前终止传输,因此错误INCOMPLETE_CHUNKED_ENCODING。

答案 1 :(得分:6)

在AWS上遇到这个问题并发现在站点配置文件中添加一些proxy_buffer指令修复了问题:

server {
    ...

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

答案 2 :(得分:4)

对我而言,解决方案是DfKimer推荐的,但/var/lib/nginx代替/var/cache/nginx

答案 3 :(得分:1)

For me the solution was enable proxy_max_temp_file_size

答案 4 :(得分:0)

proxy_set_header连接保持活动;


完整配置 服务器{         听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; 
    }

答案 5 :(得分:0)

如果代理服务器无法写入/var/lib/nginx,则无需播放文件许可权或该目录的所有权。您可以通过以下方式更改上下文的Nginx缓存目录:

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

http文件的serverlocationnginx.conf上下文中。

检查http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_temp_path

答案 6 :(得分:0)

由于服务器内存已满,出现此错误。希望这对以后的任何人有帮助。

答案 7 :(得分:0)

针对php&nginx Web服务器的100%工作解决方案

问题=> net :: ERR_INCOMPLETE_CHUNKED_ENCODING nginx

第1步:打开/etc/php/7.2/fpm/pool.d [在我使用php 7.2的情况下,选择您的php文件夹]

第二步:在pool.d文件夹中编辑www.conf文件

在我的情况下,它看起来像这样=>

[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

Step4 :现在保存并重新启动php-fpm(就我而言,我使用的是php7.2,因此cmd将是这样)

sudo service php7.2-fpm restart

现在,您可以执行脚本了,它将起作用,并且将在300秒后终止

现在,在nginx.conf文件或您的网站.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; 后,它看起来像这样

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; 
}

现在按照以下cmd重新加载nginx并重新启动php-fpm

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

注意:该代码段已由我运行和测试,如果您无法通过我的答案解决问题,请告诉我

答案 8 :(得分:0)

对我来说,解决方案是禁用缓存。 对于上下文,我的设置用于本地开发,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;
}