nginx 网络层的优化

TCP三次握手四次挥手

 

系统层的优化,主动建立连接时的重试次数

1
net.ipv4.tcp_syn_retries = 6

  建立连接时本地端口可用范围;手动可以tiaoz

1
net.ipv4.ip_local_port_range = 32768 60999

  应用层建立连接超时时间

1
2
3
4
5
6
7
8
9
10
11
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
 
 
 
 
 
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: stream, server

  系统级别调整半连接的最大数量

1
2
3
4
5
net.ipv4.tcp_max_syn_backlog #  SYN_RCVD状态连接的最大个数
 
 
 
net.ipv4.tcp_synack_retries  #被动建立连接超时重试次数

  服务器处理三次握手

如何应对SYN 攻击

 攻击者短时间伪造不同IP地址的SYN报文,快速占满backlog队列,是服务器不能正常为用户提供服务

net.core.netdev_max_backlog:接收来自网卡、但未被内核协议栈处理的报文队列长度
net.ipv4.tcp_max_syn_backlog:SYN_RCVD状态连接的最大个数
net.ipv4.tcp_abort_on_overflow:超出处理能力时,对新来的SYN直接回包RST,丢弃连接
tcp_syncookies

文件句柄数的上限

操作系统的全局设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
fs.file-max
 
 
操作系统可使用的最大句柄数
使用fs.file -nr 可以查看当前已分配、正在使用 、上限
 
 
 
设置限制用户
 
/etc/security/limits.conf
 
 
root soft nofile 65535
root hard nofile 65535
 
 
限制进程
Syntax: worker_rlimit_nofile number;
Default: —
Context: main

  设置worker进程最大并发连接数

1
2
3
Syntax: worker_connections number;
Default: worker_connections 512;
Context: events

  TCPFast Open

系统层打开

1
2
3
4
5
net.ipv4.tcp_fastopen
0 :关闭
1 :作为客户端是可以使用
2:作为服务端是可以使用
3 :客户端服务端都可以使用

  nginx进程里的配置

1
2
3
4
5
6
7
Syntax: listen address[:port] [fastopen=number];
Default: listen *:80 | *:8000;
Context: server
 
 
fastopen=number
为防止带数据的SYN共击,限制最大长度,指定TFO队列最大长度

  滑动窗口

TCP发送消息

TCP 接收消息

nginx接收body接收读操作两次超时设置

1
2
3
Syntax: client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location

  nginx两次写操作超时设置

1
2
3
Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location

  以上四层读写超时指令

1
2
3
Syntax: proxy_timeout timeout;
Default: proxy_timeout 10m;
Context: stream, server

  

Nagle 算法,充分利用带宽。打开Nagle算法:合并多个小报文一起发送介绍

 

吞吐量优先启用Nagle算法

1
tcp_nodelay off  启用

  低时延优先禁用

1
tcp_nodelay on  关闭

  指令介绍

1
2
3
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location

  四层的指令

1
2
3
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: stream, server

  nginx配置避免发送小报文

1
2
3
Syntax: postpone_output size;
Default: postpone_output 1460;
Context: http, server, location

  TCP的keeplive

功能介绍:检测实际断掉的连接;用于维护与客户端之间的防火墙有活跃网络包

系统层面的控制

net.ipv4.tcp_keepalive_time = 7200   发送心跳周期
net.ipv4.tcp_keepalive_intvl = 75  探测包发送间隔
net.ipv4.tcp_keepalive_probes = 9 探测包重传次数
nginx 方面的控制
so_keepalive=30m::10 
keepidle, keepintvl, keepcnt
   
 
lingering_close 延迟关闭的意义
   当nginx处理完成后调用close关闭连接后,若接收缓冲区仍然受到客户端发来的内容,则服务器会想客户端发送RST包关闭连接,导致客户端由于RST而忽略了http response
nginx 配置指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Syntax: lingering_close off | on | always;
Default: lingering_close on;
Context: http, server, location
   off : 关闭
   on: 由nginx判断,动用户请求未完成时启用功能,否则及时关闭连接
   always:无条件启用该功能
 
Syntax: lingering_time time;
Default: lingering_time 30s;
Context: http, server, location
  当该功能启用时,最长的读取用户请求内容的时长,达到后立即关闭连接
 
 
Syntax: lingering_timeout time;
Default: lingering_timeout 5s;
Context: http, server, location
启用该功能时,检测客户端是否仍然请求内容到达,若超时后没有请求数据,则立刻断开

  当其他读写超时指令生效引发连接关闭时,通过发送RST立刻释放断开,内存等资源

1
2
3
Syntax: reset_timedout_connection on | off;
Default: reset_timedout_connection off;
Context: http, server, location

  

  

 

 

 

 

 

 

 

 

 

 

posted @   烟雨楼台,行云流水  阅读(742)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示