目录
一、用户设置
二、nginx添加到systemd
三、nginx参数调优
1、worker与cpu
2、io模型和worker并发连接数
四、nginx访问设置
1、控制单ip并发连接数
2、控制单位时间的请求数
3、限制带宽
4、浏览器自动索引
5、expire(到期)缓存配置
6、nginx日志轮询
7、状态模块激活编辑
8、禁用不必要日志
一、用户设置
查看系统进程,nginx进程的用户是nobody,在系统中添加用户nginx,并设置配置文件用nginx用户身份启动nginx程序
nginx -s reload 加载后用户改变:
二、nginx添加到systemd
创建并编写nginx.service文件,放入/usr/lib/systemd/system目录
systemctl daemon-reload 重新加载系统配置文件,之后就可以通过systemctl命令启动关闭nginx服务
三、nginx参数调优
1、worker与cpu
注:可以通过lscpu来查看cpu状态
nginx官方推荐一个CPU核心对应一个nginx进程,并且进行捆绑。这里虚拟机2核cpu,01表示启用第一个CPU内核,10表示启用第二个CPU内核
绑定nginx进程和核心会避免由于CPU上下文切换而造成一定的损耗
2、io模型和worker并发连接数
nginx进程运行在普通用户下,受到普通用户的限制,即应用的设置受到了操作系统的限制(kernel > systemd > app),故此时设置的并发连接数65535还未生效
命令ulimit -a 查询
修改 /etc/security/limits.conf 来修改最大限制数
文件属于热插拔模块,即改即生效
四、nginx访问设置
在nginx默认发布目录/usr/local/nginx/html/ 下建立目录download ,在其中放入一张几百k的图片u用于实验测试
1、控制单ip并发连接数
在未作改动前,用ab进行压测访问测试图片
能看到10次都是成功
[root@server1 conf]# vim nginx.conf
http模块添加:
limit_conn_zone $binary_remote_addr zone=addr:10m;
$binary_remote_addr 表示通过remote_addr这个标识来做限制,nginx的内部变量,取的是远端客户端的地址
zone=addr:10m 表示创建一个大小为10M,名字为addr的内存区域
可以多开几个内存区域进行不同限制
location /download {
limit_conn addr 1; #限制并发连接数为1
}
修改后重新加载生效,再进行压测:
发现只有一次成功,因为我们只设置了一个并发连接。若我们把ab压测的并发连接改为1个即(-c1),那么10个请求都是成功的。
2、控制单位时间的请求数
修改前,设置压测的并发链接为1进行压测:
修改:
修改后加载,再测试:
上面设置了每秒接受请求数为一秒一次之后,其他9次访问均被拒绝,可以设置允许排队,即其他访问虽然不能立即处理,但可以排队等候被处理不至于直接拒绝掉,做到限流的效果。
排队、允许延迟
burst=5的效果是再处理一个访问时,后面允许五个访问排队等待被处理,但其他访问也不会被拒绝,会继续等待进入排队
测试效果
排队、不允许延迟
处理第一次访问,以及进入队列等待的5个访问,队列外的其他访问均被拒绝
测试:
3、限制带宽
限制流量为50k/s,访问一次大概需要10s
4、浏览器自动索引
通过浏览器可以访问到放在目录里的图片,但无法显示目录
用处:方便下载图片等资源
测试:
5、expire(到期)缓存配置
缓存可以降低网络带宽,加速用户访问,一般主要用于静态空间,网站图片不怎么修改的地方,比如网站公司介绍
测试:
6、nginx日志轮询
大量访问会导致ningx日志增长特别块,一些门户型站点每天的访问量很庞大,所以日志需要经常截断。
创建脚本
[root@server1 logs]# cat /opt/nginx_log.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
赋予执行权限
[root@server1 logs]# chmod +x /opt/nginx_log.sh
加入crontab定时任务
[root@server1 logs]# crontab -e
[root@server1 logs]# crontab -l
00 00 * * * /opt/nginx_log.sh &> /dev/null
为了安全,日志目录不给nginx用户访问权限
chmod -R 700 /usr/local/nginx/logs
7、状态模块激活
8、禁用不必要日志
测试:再次刷新页面,status模块请求数更新,但访问不计入日志
9、ssl模块
此时我们需要创建证书:
cert.pem证书创建到位,移动到/usr/local/nginx/conf目录
reload nginx,可以访问https