Nginx timeout超时配置详解
最近项目中用到了nginx,后台用的是Java,发现有一个请求后台处理操过了1分钟,结果请求StatusCode为504GatewayTime-out.
理解了下nginx所有timeout相关的配置,如下:
keepalive_timeout
HTTP有一个KeepAlive模式,它告诉webserver在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
httpkeep-alive,網頁的每一個請求都是HTTP(圖片,CSS等),而打開HTTP請求是要先建立TCP連接,而如果一個頁面每個請求都要打開及關閉一個TCP連接就會做成資源的浪費.keepalive_timeout就是當一個HTTP請求完成,其TCP連接會存留下來的時間,如果這時有另一個HTTP請求過來,會複用這個TCP連接,如果再沒有新的請求過來,才會關閉其TCP連接
usernginx; worker_processes1; error_log/var/log/nginx/error.logwarn; pid/var/run/nginx.pid; events{ worker_connections1024; } http{ include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log/var/log/nginx/access.logmain; sendfileon; tcp_nopushon; tcp_nodelayon; keepalive_timeout65; client_max_body_size8192m; #gzipon; #include/etc/nginx/conf.d/*.conf; server{ listen80so_keepalive=30m::; listen443defaultssl; ssl_certificate/etc/nginx/ssl/server.crt; ssl_certificate_key/etc/nginx/ssl/portalkey.key; #ssl_password_file/etc/nginx/ssl/ssl.pass; ssl_session_timeout5m; ssl_protocolsSSLv2SSLv3TLSv1; ssl_ciphersHIGH:!aNULL:!MD5; ssl_prefer_server_cipherson; location/{ proxy_request_bufferingoff; proxy_passhttp://127.0.0.1:8011/; proxy_connect_timeout180; proxy_send_timeout180; proxy_read_timeout180; send_timeout180; } location/test1_url/{ proxy_passhttp://127.0.0.1:8008/; proxy_connect_timeout180; proxy_send_timeout180; proxy_read_timeout180; send_timeout180; } location/test2_url/{ proxy_passhttp://127.0.0.1:3000/; proxy_connect_timeout180; proxy_send_timeout180; proxy_read_timeout180; send_timeout180; } } }
#配置段:http,默认75s
keepalive_timeout60;
- send_timeout :发送数据至客户端超时,默认60s,如果连续的60s内客户端没有收到1个字节,连接关闭
- proxy_connect_timeout:nginx与upstreamserver的连接超时时间
- proxy_read_timeout:nginx接收upstreamserver数据超时,默认60s,如果连续的60s内没有收到1个字节,连接关闭
- proxy_send_timeout:nginx发送数据至upstreamserver超时,默认60s,如果连续的60s内没有发送1个字节,连接关闭
so_timeout:
當用戶跟SERVER開啟了TCPCONNECTION-->一段長時間這個CONNECTION沒traffic(so_keepalivetimeout)-->SERVER發出探測包看用戶是否還存在-->若探測包沒回,則關閉TCPCONNECTION
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
so_keepalive=30m::10 willsettheidletimeout(TCP_KEEPIDLE)to30minutes,leavetheprobeinterval(TCP_KEEPINTVL)atitssystemdefault,andsettheprobescount(TCP_KEEPCNT)to10probes.
以上三个参数只能使用一个,不能同时使用,比如so_keepalive=on,so_keepalive=off或者so_keepalive=30s::(表示等待30s没有数据报文发送探测报文)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。