Nginx相关性能优化

  • 一、考虑方面:
  • 二、压力测试工具 ab ——评估服务能承载的并发
  • 三、系统性能优化
  • 1、文件句柄
  • 2、文件句柄的设置方式:
  • ①、系统全局设置(针对root用户)
  • ②、用户局部修改(针对有所用户)
  • ③、进程局部性修改(核心模块,针对nginx进程:在nginx配置文件中添加[/etc/nginx/nginx.conf])
  • ④、调整内核参数:让time_wait状态重用
  • 四、代理服务优化
  • 1、可加项:
  • 2、Keepalive_requests
  • 3、Keepalive_timeout
  • 五、静态资源优化
  • 5.1、静态资源缓存
  • ①、开启浏览器缓存:
  • ②、关闭浏览器缓存:
  • 5.2、静态资源高效读取
  • ①、sendfile(默认开启)
  • ②、tcp_nopush(默认关闭)
  • ③、提高网络的实时性,需要开启keepalive
  • 5.3、静态资源压缩
  • 5.4、防止资源盗链
  • 5.5、允许跨域访问(多路复用)
  • ①、什么是跨域访问?
  • ②、Nginx允许跨站访问与浏览器的关系:
  • 5.6、CPU亲和配置
  • Nginx安全与优化总结


一、考虑方面:

  • 【1】硬件方面:CPU、磁盘、IO、内存(负载、内存、系统稳定性、使用率、是否有损坏)
  • 【2】网络方面:网络流量是否有延迟、是否丢包
  • 【3】系统方面:文件描述符(文件句柄)【默认读取文件的时候都会占用文件描述符,系统默认是1024个,可进行调整】
  • 【4】应用方面:保持长链接http协议和time_wait
  • 【5】服务方面:静态资源服务优化

二、压力测试工具 ab ——评估服务能承载的并发

ab -n 1000 -c 100 https://www.lucien.com/
-n为指定总共发送多少个请求
-c指定每次发送多少个请求

nginx压力测试结果 nginx压测优化_静态资源

三、系统性能优化

1、文件句柄


2、文件句柄的设置方式:

①、系统全局设置(针对root用户)

root  soft  nofile  25535
root  hard  nofile  65535

②、用户局部修改(针对有所用户)

*  soft  nofile  65535
*  hard  nofile  65535

③、进程局部性修改(核心模块,针对nginx进程:在nginx配置文件中添加[/etc/nginx/nginx.conf])

worker_rlimit_nofile  65535

ulimit -n 可进行查看文件句柄数 

Vim  /etc/security/limits.conf
有个  nofile  -----》即为文件句柄数

当文件句柄不足时,系统会进行提示:Too many open files

④、调整内核参数:让time_wait状态重用

vim /etc/sysctl.conf
#如果没有启用,则只有等到time_wait状态端口释放后,才能重新使用
net.ipv4.tcp_tw_reuse = 1   
net.ipv4.tcp_timestamps = 1    (时间戳)

[root@node1 ~]# sysctl -p 进行查看我们自己添加的参数
[root@node1 ~]# sysctl -a 查看所有的内核参数

四、代理服务优化


vim /usr/local/nginx/conf/nginx.conf
http {
	#配置负载均衡的服务器列表
	upstream tomcat_server {
		server 192.168.184.60:8080 ;
		Keepalive 16;     #长连接
	}
		#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
		location ~ .*\.jsp$ {
			proxy_pass http://tomcat_server;
											#设置后端的Web服务器可以获取远程客户端的真实IP
					#设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认host的值为proxy_pass指令设置的主机名
			proxy_set_header HOST $host;
					#把$remote_addr赋值给X-Real-IP,来获取源IP
			proxy_set_header X-Real-IP $remote_addr;
					#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

1、可加项:

#设置连接web超时时间
proxy_connect_timeout 30s;

#代理等待web响应超时时间
proxy_read_timeout 30s;

#web回传数据至代理超时时间
proxy_send_timeout 30s;

#开启代理缓冲区,web回传数据至缓冲区,代理边收边传返回给客户端
proxy_buffering on;

#代理接收web响应的头信息的缓冲区大小
proxy_buffer_size 32k;

#缓冲代理接收单个长连接内包含的web响应的数量和大小
proxy_buffers  4  128k;

2、Keepalive_requests


3、Keepalive_timeout


五、静态资源优化


静态资源类型

种类

浏览器渲染

HTML、CSS、JS

图片文件

JPEG、GIF、PNG

视频文件

FLV、Mp4、AVI

其他文件

TXT、DOC、PDC

5.1、静态资源缓存

①、开启浏览器缓存:

server {
Listen 80;
server_name www.lucien.com;
Location ~ .*\.(jpg|gif|png)$ {
expires		7d;	
}
}

②、关闭浏览器缓存:

Location ~ .*\.(jpg|gif|png)$ {
add_header Cache-Control no-store;
add_header Pragma no-cache;	
}

5.2、静态资源高效读取

①、sendfile(默认开启)

  • 传统文件读取过程:
    file --> 内核空间调取 --> 应用程序(用户空间) --> 程序用户空间 -->内核空间 --> socket服务
  • Sendfile读取方式:
    file --> 内核空间调取 --> socket服务

nginx压力测试结果 nginx压测优化_中间件_02

②、tcp_nopush(默认关闭)


③、提高网络的实时性,需要开启keepalive


5.3、静态资源压缩

  • Nginx将响应报文发送至客户端之间启用压缩功能,然后进行传输,这能够有效的节约带宽,并提高响应至客户端的速度。
  • ①、gzip传输压缩,传输前压缩,传输后解压
  • ②、gzip压缩哪些类型的文件
  • 可在nginx目录下的mime.types 里查找你需要压缩的类型,然后在nginx.conf配置文件进行添加
  • ③、gzip压缩比率,加快传输,但压缩本身比较耗费服务端性能
  • ④、gzip压缩协议版本,压缩使用在http哪个协议,主流1.1版本

5.4、防止资源盗链





5.5、允许跨域访问(多路复用)

①、什么是跨域访问?


②、Nginx允许跨站访问与浏览器的关系:


5.6、CPU亲和配置

  • CPU亲和:减少进程之间不断的频繁切换,减少性能的损耗,其实现原理是将CPU核心和Nginx工作进程绑定方式,把每个worker进程固定对应的cpu上执行,减少切换cpu的cache miss,获得更好的性能。
  • ①、查看CPU物理状态:lscpu,进行建议查看
  • ②、将Nginx worker进程绑定不同核心(官方建议与cpu核心保持一致)
  • 方式一:
    worker_processes 24;
    worker_cpu_affinity 000000000001 000000000002 000000000003 000000000004;
  • 方式二:(使用较少)
    worker_processes 2;
    worker_cpu_affinity 101010101010 010101010101;
  • 方式三:(最佳绑定方式)
    worker_processes auto;
    worker_cpu_affinity auto;
  • ③、查看nginx worker 进程绑定至对应cpu
    ps -eo pid,args,psr | grep [n]ginx

Nginx安全与优化总结

  • 【1】、cpu亲和、worker进程数、调整每个worker进程打开的文件数
  • 【2】、使用epoll网络模型、调整每个worker进程的最大连接数
  • 【3】、文件的高效读取sendfile、nopush
  • 【4】、文件的传输实时性、nodealy
  • 【5】、开启tcp长连接/以及长连接超时时间keepalived
  • 【6】、开启文件传输压缩
  • 【7】、开启静态文件expires缓存
  • 【8】、隐藏nginx版本号
  • 【9】、禁止通过ip地址访问,禁止恶意域名解析,只允许域名访问
  • 【10】、配置防盗链以及跨域访问
  • 【11】、防DDOS、CC攻击,限制单IP并发连接以及http请求
  • 【12】、优雅限制nginx错误页面
  • 【13】、Nginx加密传输https优化
  • 【14】、Nginx proxy_cache、fastcgi_cache、uwsgi_cache缓存