访问超时这个事一般都是在nginx中配置的。
之前大脑发昏,一直研究PHP来着,后来发现,不行,PHP超时怎么配都不好用。
首先说一下配置的位置,是在每个域名的配置文件中配置的
我的域名配置文件如下:
ini
复制代码
server { listen 443 ssl; server_name xxx.xxxx.net; ssl_certificate /xxx/xxx/xxx/xxx/xxxx_xxx.xxx.net.pem; ssl_certificate_key /xxx/xxx/xxx/xxx/xxxx_xxx.xxx.net.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; root /xxx/xxx/xxx/xxx/xxxx/; location / { try_files $uri $uri/ /index.php?$query_string; index index.html index.htm; } location ~ .php(.*)$ { fastcgi_pass 127.0.0.1:9000; #配置访问超时时间 keepalive_timeout 60000s; fastcgi_connect_timeout 36000s; fastcgi_send_timeout 36000s; fastcgi_read_timeout 36000s; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } } server { listen 80; server_name dev.mools.net; rewrite ^(.*)$ https://$host$1 permanent; #将该域名的http访问重写至https }
配置访问超时的代码其实就是下面的四行:
ini
复制代码
#配置访问超时时间 keepalive_timeout 60000s; fastcgi_connect_timeout 36000s;#链接 fastcgi_send_timeout 36000s;#发请求 fastcgi_read_timeout 36000s;#读取
下边我们大概来看下,基本上其对应的都是什么意思:
Fastcgi_connect_timeout
是指fastcgi进程想nginx进行发送请求保持的连接的时间。
fastcgi_read_timeout
是指fastcgi进程向nginx进程发送response的整个过程的超时时间
fastcgi_send_timeout
是指nginx进程向fastcgi进程发送request的整个过程的超时时间
keepalive_timeout(长连接类型)
语法 keepalive_timeout timeout [ header_timeout ]
默认值 75s
上下文 http server location
说明 第一个参数指定了与client的keep-alive连接超时时间。服务器将会在这个时间后关闭连接。可选的第二个参数指定了在响应头Keep-Alive: timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必要去关闭连接了。没有这个参数,nginx不会发送Keep-Alive响应头(尽管并不是由这个头来决定连接是否“keep-alive”)(服务器在返回数据给用户时,在头header文件中会添加keepalive字段,75s,浏览器在这个时间后能够主动关闭连接)
两个参数的值可并不相同
注意不同浏览器怎么处理“keep-alive”头
MSIE和Opera忽略掉"Keep-Alive: timeout=" header.
MSIE保持连接大约60-65秒,然后发送TCP RST
Opera永久保持长连接
Mozilla keeps the connection alive for N plus about 1-10 seconds.
Konqueror保持长连接N秒
其他的一些参数:
1:proxy_connect_timeout
语法 proxy_connect_timeout time
默认值 60s
上下文 http server location
说明 该指令设置与upstream server的连接超时时间,有必要记住,这个超时不能超过75秒。
这个不是等待后端返回页面的时间,那是由proxy_read_timeout声明的。如果你的upstream服务器起来了,但是hanging住了(例如,没有足够的线程处理请求,所以把你的请求放到请求池里稍后处理),那么这个声明是没有用的,由于与upstream服务器的连接已经建立了。
2:proxy_read_timeout
语法 proxy_read_timeout time
默认值 60s
上下文 http server location
说明 该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。
3:client_header_timeout
语法 client_header_timeout time
默认值 60s
上下文 http server
说明 指定等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1).仅当在一次read中,没有收到请求头,才会算成超时。如果在超时时间内,client没发送任何东西,nginx返回HTTP状态码408(“Request timed out”)
4:client_body_timeout
语法 client_body_timeout time
默认值 60s
上下文 http server location
说明 该指令设置请求体(request body)的读超时时间。仅当在一次readstep中,没有得到请求体,就会设为超时。超时后,nginx返回HTTP状态码408(“Request timed out”)
5:lingering_timeout
语法 lingering_timeout time
默认值 5s
上下文 http server location
说明 lingering_close生效后,在关闭连接前,会检测是否有用户发送的数据到达服务器,如果超过lingering_timeout时间后还没有数据可读,就直接关闭连接;否则,必须在读取完连接缓冲区上的数据并丢弃掉后才会关闭连接。
6:resolver_timeout
语法 resolver_timeout time
默认值 30s
上下文 http server location
说明 该指令设置DNS解析超时时间
7:proxy_send_timeout
语法 proxy_send_timeout time
默认值 60s
上下文 http server location
说明 这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。如果超时后,upstream没有收到新的数据,nginx会关闭连接
8 :proxy_upstream_fail_timeout(fail_timeout)
语法 server address [fail_timeout=30s]
默认值 10s
上下文 upstream
说明 Upstream模块下 server指令的参数,设置了某一个upstream后端失败了指定次数(max_fails)后,该后端不可操作的时间,默认为10秒
以上大概就是nginx配置访问超时的所有内容。
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”