nginx 优化

nginx 优化

  1. 基础配置优化
  2. 缓存配置优化

基础配置优化

  1. CPU 亲和性优化 : 每一个 Nginxworker 线程都能固定到具体的 CPU 核心上
  2. Nginx 模型优化 : kernel 2.6 后使用 epoll , 单个线程的最大连接数 worker_connections 配置的更合理一点
  3. Nginx 传输方式优化 : 零拷贝,HTTP 配置模块中添加一个 sendfile on,实现静态文件的内核态到用户态的零拷贝
  4. Nginx 文件压缩优化 : gzip on 负责打开后端的压缩功能

nginx master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。

缓存配置优化

  1. 浏览器缓存优化
  2. 代理缓存优化
  3. HTTPS SSL 缓存优化
  4. KV 服务缓存优化等

浏览器缓存

浏览器缓存通常是缓存到客户端(如:浏览器、客户端 app )

可以把静态元素,比如用户请求的图片、CSSJS 等元素缓存到客户端。这种缓存可以通过 Nginx 配置中的 expires 配置项进行设置,expires 后面可以加具体的时间,也可以加对应的特定意义的数值,比如 -1 表示永久缓存,max 设置最大周期缓存(默认缓存周期为 10 年),需要做具体的时间的设置可以写入具体的时间周期,比如一个小时或是一天

HTTPS 配置优化

Nginx 中配置 ssl_session_cache

配置中分配 Nginx 在处理 SSL 会话所需要开辟的共享内存的空间为 10 MB,第二个参数就是设置 SSL SessionKey 的超时时间,这里设置的为 10 分钟,也就是每隔 10 分钟需要重新再进行一次建联,这是一个在服务端的超时时间。

打开文件缓存

open_file_cache 具体的设置策略,max 表示最大能够缓存的文件个数,inactive 表示最少的用户使用次数。我们结合看一下,这个表示在 20 秒内最小需要使用两次。如果没有使用的话,就会把元数据删掉,也这就是一个淘汰元数据的策略。

open_file_cache_valid 是设置主动更新和检查的时间,表示每隔 30 秒检查缓存文件的元信息有没有对应的更新,如果有更新就需要去做对应的更新,它是一个更新的策略

代理缓存优化

1
2
3
4
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60mlocation / {
        proxy_cache my_cache;
        …
}

通过 Nginx 作代理,可以支持实现动静态的分离,静态元素直接交给 Nginx 来处理,再把后端动态数据适当作缓存。通常做这种代理+缓存的架构,是能有效的提高整体网站的访问并发性能。

缓存使用注意问题

对于缓存的整体使用,之前说的缓存越多越好,越靠前越好,命中率越高越好

  1. 文件更新策略问题
  2. 缓存命中率失败给后端造成的瞬间压力
  3. 多节点缓存一致性