服务器超时通常有以下几种情况导致:
- 程序在处理大量数据,导致等待超时。
- 程序中调用外部请求,而外部请求响应超时。
- 连接数据库失败而没有停止,死循环重新连。
出现这种情况,我们可以先优化程序,缩短执行时间。另一方面,可以调大nginx超时限制的参数,使程序可以正常执行。
处理大量数据
Nginx 默认对上传文件的限制的小为1M,若请求内容过大超过设定就导致超时。
client_max_body_size
限制请求体的大小,若超过所设定的大小,返回413错误。 需要修改nginx client_max_body_size 属性限制客户端上传文件的大小。
采用uwsgi的需要注意下buffer-size参数,该参数是设置内部缓冲大小也是设置请求的最大大小,有些请求情况下文件等内容需要进行缓存,会受到该参数影响导致超时。
使用django后端上传文件报错,可能需要配置 FILE_UPLOAD_MAX_MEMORY_SIZE参数的大小。
外部请求响应超时
一般访问超时需要分发送请求超时,连接请求超时,接受请求超时三种,同时需要查看服务器与应用之间采用的是那种程序进行操作处理,一般默认的请求时间为60秒。
PHP,cgi,fastcgi等程序生成的应用
fastcgi_connect_timeout
fastcgi连接超时时间,默认60秒
fastcgi_send_timeout
nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒
fastcgi_read_timeout
fastcgi 进程向 nginx 进程发送输出过程的超时时间,默认值60秒
Nginx+uwsgi作为服务器的连接方式的的应用
uwsgi_connect_timeout:
默认60秒,与uwsgi-server连接的超时时间,该值不能超过75秒.若在超时时间内未能成功连接则断开连接尝试
uwsgi_read_timeout:
默认60秒,nginx等待uwsgi进程发送响应数据的超时时间。若有需要长时间运行才能产生输出结果的uwsgi进程则需将此参数调高。若在错误日志文件中看到
upstream timed out需将此参数调高。若超过超时时间还未收到响应则nginx关闭连接
uwsgi_send_timeout:
默认60秒,nginx向uwsgi进程发送请求的超时时间。超时时间由两次写操作的时间间隔算,而非整个请求。若超过超时时间仍没写入动作则nginx关闭连接
使用Nginx作为代理服务器
proxy_connect_timeout
http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。
proxy_read_timeout
http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒。
proxy_send_timeout
http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。
send_timeout
服务器超时设置
客户端信息读取超时
client_header_timeout
读取请求头的超时时间,若超过所设定的大小,返回408错误。
client_body_timeout
读取请求实体的超时时间,若超过所设定的大小,返回413错误。
数据库连接失败
该方面主要是具体应用请求数据库连接方式有误或者数据库程序有一定的问题,一般需要具体到应用进行分析修改。
可能错误原因
以上内容都配置好了后依然存在报错,可能原因:
- 如果是nginx链接uswsgi超时,出现504错误,可能是 uwsgi链接数不够,配置可查看https://blog.csdn.net/qq435792305/article/details/78035312
- 用途是使用nginx作为上传文件服务器,nginx有安装nginx_upload_module模块,可以查看该模块的配置信息进行修改https://www.cnblogs.com/lidabo/p/4171515.html。