nginx优化
2019-12-28 11:48 unique-yichen 阅读(139) 评论(0) 收藏 举报1、优化nginx进程个数策略
在高并发、高访问量的web服务场景,需要事先启动好更多的nginx进程,以保证快速响应并处理大量并发用户的请求。
worker_processes 1; 一般调整到与CPU的颗数相同
查看CPU cat /proc/cpuinfo 或者 top 或者 sar -u 1 5
2、默认情况下,nginx的进程跑在某一个CPU或CPU的某一个核上,导致nginx进程使用硬件的资源不均,这里的优化是不同的nginx进程给不同的CPU处理,充分有效的利用有效的硬件资源
八核CPU配置
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
四核CPU配置
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
二核CPU配置
worker_processes 2;
worker_cpu_affinity 0101 1010;
3、调整nginx单个进程允许的客户端最大连接数
放置位置:events 标签
参数语法:worker_connections number
默认配置:worker_connections 512;
总并发=worker_processes*worker_connections
4、配置nginx worker进程最大打开文件数
放置位置:主标签段
参数语法:worker_rlimit_nofile number
说明:作用是改变worker_processes能打开的最大文件数
worker_rlimit_nofile 65535;
这个参数受系统文件的最大打开限制,解决方法:
vim /proc/sys/fs/file-max
文件系统最大可打开文件数
要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf 在该配置文件中添加
* soft nofile 65535
* hard nofile 65535
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
* 表示所用的用户
5、nginx事件处理模型优化
nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。
要根据系统类型不同选择不同的事务处理模型,选择有“use [ kqueue | rtsig |epool |dev/pool |select |pllo ];”我们使用的是Centos6.5的linux,因此将nginx的事件处理模型调整为epoll模型。
events {
worker_connections 1024;
use epoll;
}
6、一般来说,软件的漏洞都和版本相关,所以我们要隐藏或消除web服务对访问用户显示的各种敏感信息
放置位置:http模块下
参数:server_tokens off;
nginx隐藏需要修改原代码
修改路径: vim /nginx/src/core/nginx.h

修改完后,从新编译: make && make install
重启nginx
7、httpd长连接超时时间
默认是60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!否则会导致许多无效的http连接占据着nginx的连接数,终nginx崩溃!
http {
keepalive_timeout 60;
}
8、开启高效文件传输模式
设置参数: sendfile on;
sendfile参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘i/o阻塞,提升nginx工作效率。
http {
sendfile on; #放在http,server,location都可以
tcp_nopush on;
tcp_nodelay on;
}
9、配置nginx gzip压缩实现性能优化
(1).nginx压缩功能的介绍: nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送给客户端之前,nginx服务器会根据一些具体的策略实施压缩,以节省网站出口带宽,同时加快了数据传输效率,提升了用户的访问体验。
(2).压缩的优点: 提升网站用户体验:由于发给用户的内容小了,所以用户访问单位大小的页面就快了,用户体验就提升了 节约网站带宽成本:由于数据时压缩传输的,因此,会消耗一些cpu资源
(3).压缩的对象: 纯文本内容压缩比很高,因此,纯文本的内容最好要压缩 被压缩的纯文本文件必须要大于1KB,由于压缩算法的特殊原因,极小的文件压缩反而变大 图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的,如果再压缩很可能不会减小或减小很少,或者有可能增大,而在压缩时还会消耗大量的CPU、内存资源
参数:
gzip on; #表示开启压缩功能
gzip_min_length 1k; #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大
gzip_buffers 432k; #压缩缓存区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 6; 压缩比例
gzip_types text/css text/html; #指定压缩的类型
gzip_vary on; #vary header支持
10、nginx expires功能
作用:为用户访问网站的内容设定一个过期时间,当用户第一次访问到这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及之后继续访问该网站,浏览器就会检查已经缓存在用户浏览器本地的内容,就不会去浏览器下载了,直到缓存的内容过期或者被清除为止。
优点:降低网站的带宽,节约成本 加快用户访问网站的速度,提升了用户访问体验 服务器访问量降低,服务器压力就减轻了,服务器的成本也会降低,甚至可以节约人力成本
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
expires 360d;
}
缺点及解决办法
当网站被缓存的页面或数据更新了,此时用户端看到的可能还是旧的已经缓存的内容,这样就会影响用户体验,那么如何解决这个问题呢? 一:对于经常需要的变动图片等文件,可以缩短对象缓存时间,例如,百度、谷歌等网站的首页图片经常会换成一些节日的图,这里可以将缓存期修改为1天 二:当网站改版或更新内容时,可以在服务器将缓存的对象改名(网站代码程序) 对于网站的图片、附件,一般不会被用户直接修改,用户层面上的修改图片,实际上是重新传到服务器,虽然内容一样但是一个新的图片名了 网站改版升级会修改JS、CSS元素,若改版的时候对这些元素改了名,会使得前端的CDN以及用户端需要重新缓存内容
11、禁止访问指定目录下的所有文件和目录
配置禁止访问指定的单个或多个目录
location ~ ^/(static|install|)/ { deny all; }
location ~ ^/static { deny all; }
12、location匹配规则
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考): 首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求
浙公网安备 33010602011771号