我在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", '')
答案 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
文件的server
,location
或nginx.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;
}