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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。