一.设置Nginx运行进程个数
1.查看cpu个数
grep processor /proc/cpuinfo
使用top 按1,也可以查看cpu的核心数
2.设置Nginx进程数
我的cpu数量是4,修改为4
vim /usr/local/nginx/conf/nginx.conf
二.Nginx运行CPU亲和力
vim /usr/local/nginx/conf/nginx.conf
4核4线程配置
注:4核cpu,开启4个进程 0001表示开启第一个cpu内核,0001表示开启第一个cpu内核 ,0010开启第2个cpu内核,依次类推;有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。
8核8线程配置
vim /usr/local/nginx/conf/nginx.conf
4线程的cpu,只想跑两个进程
vim /usr/local/nginx/conf/nginx.conf
二.永久修改系统最大打开文件数
在尾部添加,重新登录生效
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
三.Nginx事件处理模型
vim /usr/local/nginx/conf/nginx.conf
nginx采用epoll 事件模型。处理效率高。
worker_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections
如何设置,可以根据一个进程启动所占内存,top -u www(www表示nginx程序用户)
刚启动一个进程占用内存是5M左右
四.http主题优化
开启高效传输模式
vim /usr/local/nginx/conf/nginx.conf
sendfile on;
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来传输,输出文件,当nginx是一个静态文件服务器的时候,开启sendfile配置项能大大提高nginx的性能。
tcp_nopush on;
在sendfile开启模式才有效,防止网络阻塞,积极的减少网络报文段的数量(将响应头和响应体两部分一起发送,而不一个接一个的发送。)
五.长时间超时时间
主要目的是CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65;
keepalived_timeout 与client的keep-alive连接超时时间,单位是秒,服务器和客户端无交互后将在这个时间后关闭连接,长连接可以减少重建连接的开销,如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
六.文件上传大小限制
vim /usr/local/nginx/conf/nginx.conf
client_max_body_size 10m; #在40行添加
七.gzip调优
启用gzip
使用gzip压缩功能,可为我们节约带宽,加快传输速度,有更好的体验,节约成本
Nginx启用压缩功能需要用ngx_http_gzip_module模块,apache使用的是mod_deflate
一般我们需要压缩的内容有:文本,js,html,css,
对于图片,视频,flash不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!
在http{}区域中添加:
vim /usr/local/nginx/conf/nginx.conf
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
参数说明:
gzip on; #开启压缩功能
gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length(内容长度)中获取,默认值是0,建议设置成大于1K,如果小于1K可能会越压越大。
gzip_buffers 4 32k; #压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1; #压缩版本,用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_comp_level 6; #压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。
gzip_types text/css text/xml application/javascript; #用来指定压缩的类型,‘text/html’类型总是会被压缩
默认值: gzip_types text/html (默认不对js/css文件进行压缩)
#不能使用通配符 text/*
#(不论是否指定)text/html 默认压缩
# 设置压缩哪种文本文件可参考 conf/mime.types
gzip_vary on; #启用应答头"Vary: Accept-Encoding"。和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩。其实cdn,代理服务器,原理上都是代理服务器。他们一般以url为key值进行缓存。而vary属性的设置,告诉了代理根据url缓存的同时,vary的信息也作为key。比如客户端(浏览器)请求的信息里带上了Accept-Encoding:gzip 则返回压缩副本。如果没有带这个头信息,默认返回非压缩副本
八.日志切割优化
日志优化的目的,为了一天日志一压缩,按天存放
yum install -y bzip2
cd /usr/local/nginx/logs/
vim cut_nginx_log.sh
#!/bin/bash
date=$(date +%F -d -1day)
cd /usr/local/nginx/logs
if [ ! -d cut ] ; then
mkdir cut
fi
mv access.log cut/access_$(date +%F -d -1day).log
mv error.log cut/error_$(date +%F -d -1day).log
/usr/local/nginx/sbin/nginx -s reload
tar -jcvf cut/$date.tar.bz2 cut/*
rm -rf cut/access* && rm -rf cut/error*
find -type f -mtime +10 | xargs rm -rf
crontab -e 设置计划任务
0 0 * * * /bin/sh /usr/local/nginx/logs/cut_nginx_log.sh > /dev/null 2>&1