一、资源压缩
如果一个静态资源的过大,传输起来肯定越慢,并且会占用大量带宽,因此在项目部署时可以通过
Nginx
对于静态资源实现压缩传输。
Nginx
提供了三个支持资源压缩的模块
ngx_http_gzip_module、ngx_http_gzip_static_module、ngx_http_gunzip_module
,其中
ngx_http_gzip_module
属于内置模块。
开启资源压缩:
http{
# 开启压缩机制
gzip on;
# 指定会被压缩的文件类型(也可自己配置其他类型)
gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
# 设置压缩级别,越高资源消耗越大,但压缩效果越好
gzip_comp_level 5;
# 在头部中添加Vary: Accept-Encoding(建议开启)
gzip_vary on;
# 处理压缩请求的缓冲区数量和大小
gzip_buffers 16 8k;
# 对于不支持压缩功能的客户端请求不开启压缩机制
gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩
# 设置压缩响应所支持的HTTP最低版本
gzip_http_version 1.1;
# 设置触发压缩的最小阈值
gzip_min_length 2k;
# 关闭对后端服务器的响应结果进行压缩
gzip_proxied off;
}
二、使用epoll网络模型
Nginx
是基于多路复用模型实现的,但默认的多路复用模型
select/poll
最大只能监听
1024
个连接,而
epoll
则属于
select/poll
接口的增强版,因此切换为
epoll
模式能够大程度上提升单个Worker的性能:
events {
# 使用epoll网络模型
use epoll;
# 调整每个Worker能够处理的连接数上限
worker_connections 10240;
}
三、开启CPU亲和机制
在实际项目中进程或线程数往往都会远超出系统
CPU
的核心数,操作系统执行原理本质上是采用时间片切换机制,也就是一个
CPU
核心会在多个进程之间不断频繁切换,造成很大的性能损耗。而
CPU
亲和机制则是指将每个
Nginx
的工作进程,绑定在固定的
CPU
核心上,从而减小
CPU
切换带来的时间开销和资源损耗:
worker_cpu_affinity auto;
四、调整Worker工作进程
Nginx启动后默认只会开启一个
Worker
工作进程处理客户端请求,而我们可以根据机器的
CPU
核数开启对应数量的工作进程,以此来提升整体的并发量:
worker_processes auto; # 自动根据CPU核心数调整Worker进程数量
同时也调整每个工作进程能够打开的文件句柄数:
worker_rlimit_nofile 20000; # 每个Worker能打开的文件描述符,最少调整至1W以上,负荷较高建议2-3W
五、长连接配置
建议开启
HTTP
长连接,用户减少握手的次数,降低服务器损耗:
upstream xxx {
# 长连接数
keepalive 32;
# 每个长连接提供的最大请求数
keepalived_requests 100;
# 每个长连接没有新的请求时,保持的最长时间
keepalive_timeout 60s;
}
六、使用零拷贝技术
零拷贝读取机制与传统资源读取机制的区别:
- 传统方式:硬件–>内核–>用户空间–>程序空间–>程序内核空间–>网络套接字
- 零拷贝方式:硬件–>内核–>程序内核空间–>网络套接字
sendfile on; # 开启零拷贝机制
版权归原作者 小毕超 所有, 如有侵权,请联系我们删除。