Nginx优化

Nginx 参数优化 #

反向代理 #

proxy_cache: 10M(重要)
proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g;

tls ssl #

ssl_session_cache builtin:1000 shared:SSL:10m;  /// 一天内连接上的用户, 不需要再协商秘钥
ssl_session_cache builtin:1000 shared:SSL:10m;  /// 1m -> 4000个https连接
ssl_session_timeout 10m; /// 10分钟
ssl_protocols TLSv1.2;  /// 版本号

非安全请求重定向 #

No redirect:  无重定向 
Redirect: 301-302 -》 转到https站点 

gzip #

gzip on;
gzip_comp_level 5;
gzip_http_version 1.1;   /// 注意:gzip 在1.1上有效, http2.0上是无效的
gzip_min_length 256;
gzip_types application/atom+xml ... 
gzip_proxied any;
gzip_vary on;

worker #

worker_connections  16384;  ///    一个worker有 16384/2=8192 ‬个链接 .
                                   两个事件, 一个读事件, 一个写事件。 
                                   越多的connections对应更多的内存消耗。
Default: worker_connections 512;                                 
高级选项:
worker connections的内存池(pools), 更少的的内存碎片。一般是nginx自动分配的, 不用分配。
Default: 	connection_pool_size 256|512
Default: 	request_pool_size 4k;
worker_processes  设置worker进程的数量

减少进程间切换 #

程间切换: cpu从一个进程或线程切换到另一个进程或线程。

  • 主动切换和被动切换
  • 减少主动切换
  • 被动切换:时间片耗尽。 减少被动切换: 增大进程优先级 Nice 静态优先级: -20 – 19 Priority 动态优先级: 0-139

提升CPU缓存命中率 #

  • 绑定worker到指定cpu L1,L2(cpu独享) L3(共享的)
worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];

lua 分配的内存(暂时没有使用) #

lua_shared_dict configuration_data 5M;
lua_shared_dict certificate_data 16M;
// 应用场景: 集群流控,  多个worker之间的内存的共享。

http的keeplive 长链接(一个tcp的链接,上面有多个http的请求) #

注意: 非tcp keeplive

keepalive_disable;  /// 没有设置
keepalive_timeout  75s; // 默认值
keepalive_requests 100; // 默认值  一个tcp请求中可发100个http请求

测试用例 #

URL:logsearch.sh.pre.urtc.com.cn

case1 #

input: 1000用户并发, 短连接, 非keepalive的

result: 链接数 40000+
tps 4000+
avg 百ms

case2 #

input: 1500用户并发,短连接, 非keepalive的

result: 链接数 30000+,
tps 4000+ ,
avg 200ms+

参考 #

  1. Nginx全面配置 *** 未