首先需要明确需要低延迟的场景:是否需要频繁通讯,比如 IM 类型、WebSocket 类型、SSL 握手、端口转发以及 Keepalive 类型的连接。
开启 tcp_nodelay
http {
tcp_nodelay on;
}
stream {
tcp_nodelay on;
}
tcp_nodelay
可以设定在 http 模块和 stream 模块,只要接收都数据就立即发送出去而不需要等待缓冲区满。
开启 reuseport 和 worker_processes
worker_processes auto;
{
listen 443 reuseport;
}
开启了 reuseport
之后,多个 worker 进程可以同时监听 443 端口,Nginx 就会保持多个 worker 在运行状态,可以快速接受连接。
开启 TCP Fast Open
打开操作系统的 TFO:
Linux 内核系统:
net.ipv4.tcp_fastopen=3
1:客户端模式;2:服务端模式;3:两者
BSD 系统:
net.inet.tcp.fastopen.client_enable = 1
net.inet.tcp.fastopen.server_enable = 1
Nginx 的 listen 端口后面加上 fastopen
:
{
listen 443 ssl fastopen=512;
}
512 还没有完成 3 次握手的最大队列数量
参考:http://nginx.org/en/docs/stream/ngx_stream_core_module.html