upstream timed out (110: Connection timed out) while reading response header from upstream

时间:2024-03-07 06:55:59

原因:
 1、nginx缓冲区太小或超时时间太短
 2、后端服务器响应慢
解决方案:


1、设置缓冲区大小和超时时长

server {
    listen       8080;
    server_name  XXX.XXX.com;
    large_client_header_buffers 4 16k;     # 读取客户端请求头的缓冲区的最大数量和大小
    client_max_body_size 300m;     #设置nginx能处理的请求大小,超过请求的大小返回异常码413
    client_body_buffer_size 128k;  #请求主体的缓冲区大小。请求主体超过缓冲区大小就会写入临时文件,缓冲区太小服务器发我跟就会跟缓慢
    proxy_connect_timeout 600;   #nginx连接到后端服务器的连接超时时间,发起握手等候响应超时时间。默认60s
    proxy_read_timeout 600;    #连接成功后,等候后端服务器响应时间(后端服务器处理请求时间)
    proxy_send_timeout 600;    #后端服务器数据回传时间
    proxy_buffer_size 64k;     #nginx可从服务器一次接收的最大数据大小
    proxy_buffers  4 32k;      #该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台。
    proxy_busy_buffers_size 64k;  #nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据(这部分的大小是由proxy_busy_buffers_size来控制的,建议为proxy_buffers中单个缓冲区大小的2倍),然后它继续从后端取数据,缓冲区满了之后就写到磁盘的临时文件中。
    proxy_temp_file_write_size 64k;    #临时文件由proxy_max_temp_file_size和proxy_temp_file_write_size这两个指令决定。
    proxy_temp_file_write_size #是一次访问能写入的临时文件的大小,默认是proxy_buffer_size和proxy_buffers中设置的缓冲区大小的2倍,Linux下一般是8k。
    }

2、设置http版本和header的Connection来解决该后端服务器响应慢问题:

proxy_http_version 1.1;  #HTTP1.1之后,HTTP协议支持持久连接
proxy_set_header Connection "";   # 设置Connection为长连接(默认为no)  Nginx和Server之间维持长连接

location / {

proxy_pass http://xxxxx;

proxy_http_version 1.1;                        

proxy_set_header Connection "";     

}

修改nginx配置文件,增加以上配置后重启nginx即可解决