NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

解决办法:
在nginx中的对应的反向代理配置如下内容,即可解决:

1
2
3
4
proxy_buffer_size 1024k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 16 1024k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 2048k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 2048k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传

错误原因分析:
1.nginx配置缓存区设置过小
2.nginx的临时目录(/proxy_temp)过大或没有权限写入缓存文件
3.磁盘空间不足

经过验证是第一种原因(nginx配置缓冲区设置过小)

:nginx的缓冲区作用是什么?

:如果客户端到nginx速度快,nginx到服务器速度慢,没有缓冲区,一点点数据量就直接发到客户端,十分浪费性能。
有了缓冲区,积累到一定量,再传输到客户端,减少了Tcp请求。
相反,客户端到nginx速度慢,nginx到服务器速度快,没有缓冲区,
nginx到服务器的连接就会一直保持在那边,直到客户端接受完毕。
有了缓冲区,返回内容放到缓冲区后,nginx到服务器的连接就能断开了,客户端从缓冲区拉取即可。

参考解决办法:

NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)解决办法

缓冲区的作用

nginx unknown directive stream解决办法

nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。比如在内网有一个mysql服务,想暴露到公网上去使用,就可以通过nginx代理的方式通过nginx来进行内网mysql的访问。

首先用nginx -V 查看有没有安装这个模块,(yum安装的默认都有这个模块)然后用find查看下库文件路径,不同的操作系统位置不同。

1
2
3
find / -name "ngx_stream_module.so"

/usr/lib64/nginx/modules/ngx_stream_module.so

如果没有找到,执行

1
yum -y install nginx-all-modules.noarch

在nginx头部加入

1
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

测试环境用nginx代理mysql tcp端口示例

1
2
3
4
5
6
7
8
9
10
11
stream {
upstream mysql63306 {
hash $remote_addr consistent;
server 192.168.1.22:3306 max_fails=3 fail_timeout=300s;
}

upstream mysql64406 {
hash $remote_addr consistent;
server 192.168.1.12:3306 max_fails=3 fail_timeout=300s;
}
}

Upstream SSL - peer closed connection in SSL handshake

  • Change your upstream to use the IP
1
2
3
upstream webshop_domain_be {
server <IP>:443;
}
  • And then change your proxy_pass block to
1
2
3
4
5
location / {
proxy_ssl_session_reuse off;
proxy_ssl_server_name $host;
proxy_pass $scheme://webshop_domain_be;
}
  • If the above doesn't work then add proxy_ssl_server_name on; also to the config

reload操作时出现nginx: [alert] kill(24971, 15) failed (3: No such process)

使用netstat -tunllp查出具体pid

1
2
3
4
5
[root@VM_1_172_centos orange]#  netstat -tunllp|grep nginx
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 4481/nginx: master
tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN 4481/nginx: master
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 4481/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4481/nginx: master

找到logs/nginx.pid文件, 将里面的pid值修改为4481

重新reload

nginx/openresty could not be resolved (3: Host not found)

一. 在nginx的配置中, proxy_pass引用了变量,在Nginx0.6.18以后的版本都会有这样的错误

proxy_pass http://$subdomain;

解决

// 增加DNS解析地扯,局域网解析可设置自己的DNS解析服务器地扯

resolver 8.8.8.8;

proxy_pass http://$subdomain;

二. k8s中使用openresty或者nginx, 不识别service name

参见

  1. https://groups.google.com/g/openresty-en/c/jIrpyTYgSVA
  2. https://devpress.csdn.net/cloud/62ff8acec6770329308059d3.html
  3. https://www.jb51.net/article/235614.htm