小知识:Nginx timeout超时配置详解

最近项目中用到了nginx,后台用的是Java, 发现有一个请求后台处理操过了1分钟,结果请求Status Code为504 Gateway Time-out.

理解了下nginx 所有timeout相关的配置,如下:

keepalive_timeout

HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

http keep-alive, 網頁的每一個請求都是HTTP (圖片, CSS等), 而打開HTTP 請求是要先建立TCP 連接, 而如果一個頁面每個請求都要打開及關閉一個TCP 連接就會做成資源的浪費. keepalive_timeout 就是當一個HTTP 請求完成, 其TCP 連接會存留下來的時間, 如果這時有另一個HTTP 請求過來, 會複用這個TCP 連接, 如果再沒有新的請求過來, 才會關閉其TCP連接

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid    /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include    /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main $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.log main;
sendfile    on;
tcp_nopush   on;
tcp_nodelay on;
keepalive_timeout 65;
client_max_body_size 8192m;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
server {
listen 80 so_keepalive=30m::;
listen 443 default ssl;
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_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_request_buffering off;
proxy_pass http://127.0.0.1:8011/;
proxy_connect_timeout    180;
proxy_send_timeout     180;
proxy_read_timeout     180;
send_timeout  180;
}
location /test1_url/ {
proxy_pass http://127.0.0.1:8008/;
proxy_connect_timeout    180;
proxy_send_timeout     180;
proxy_read_timeout     180;
send_timeout  180;
}
location /test2_url/ {
proxy_pass http://127.0.0.1:3000/;
proxy_connect_timeout    180;
proxy_send_timeout     180;
proxy_read_timeout     180;
send_timeout  180;
}
}
}

# 配置段: http,默认75s

keepalive_timeout 60;

send_timeout :发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭 proxy_connect_timeout: nginx与upstream server的连接超时时间 proxy_read_timeout: nginx接收upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭 proxy_send_timeout: nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭

so_timeout:

當用戶跟SERVER開啟了TCP CONNECTION –> 一段長時間這個CONNECTION 沒traffic (so_keepalive timeout) –> SERVER 發出探測包看用戶是否還存在 –> 若探測包沒回, 則關閉TCP CONNECTION 

?
1
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
?
1
2
so_keepalive=30m::10
will set the idle timeout (TCP_KEEPIDLE) to 30 minutes, leave the probe interval (TCP_KEEPINTVL) at its system default, and set the probes count (TCP_KEEPCNT) to 10 probes.

以上三个参数只能使用一个,不能同时使用, 比如so_keepalive=on, so_keepalive=off或者so_keepalive=30s::(表示等待30s没有数据报文发送探测报文)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/chunzhiyan/article/details/103601912

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:linux jexus服务设置开机启动

2023-4-2 3:11:02

建站知识

小知识:Debian 9系统下修改默认网卡为eth0的方法

2023-4-2 3:19:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索