目录
一. nginx并发优化(这里实验没做)
二.nginx平滑升级(实验出现错误,排错失败)
三.nginx版本回退(平滑升级都没做,这个能做???)
四.nginx限流
(1)控制并发数
(2)控制访问请求数量
(3)控制服务器单次可处理的请求数
(4)控制传输带宽
五.nginx浏览器端优化
(1)自动索引功能
(2)如何设置缓存的有效期
(3)中文乱码
六.nginx日志管理
(1)nginx日志自动备份脚本
(2)goaccess日志可视化
七.configure时的两个参数解释
(1)status
(2)SSL模块
Linux下高并发socket最大连接数所受的各种限制
1.修改用户进程可打开文件数限制
/etc/security/limits.conf
nginx - nofile 65535
2.Linux系统级的最大打开文件数限制
fs.file-max = 188414 //和内存容量相关
3.修改网络内核对TCP连接的有关限制
net.ipv4.ip_local_port_range = 1024 65535
4.限制接收新 TCP 连接侦听队列的大小
net.core.somaxconn = 2048
5.启用tcp连接timewait快速回收和重用
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
worker_processes //工作进程数
worker_connections //单个工作进程并发连接数
nginx作为http服务器时: max_clients = worker_processes * worker_connections
nginx作为反向代理服务器时: max_clients = worker_processes * worker_connections / 2
1. ulimit -a 查看用户进程能打开的最大文件数
为什么需要平滑升级:当服务器在运行时,需要升级的情况下,平滑升级即就是不断开服务器就可以进行升级,最大限度保证数据的完整性。
准备新版本1.21.1的源代码编译包,老操作,解压进入目录
scp /home/westos/Desktop/aaaalinux\ file/docs/lamp/nginx-1.21.1.tar.gz root@server1:~
进入解压后的目录,修改相关配置
vim auto/cc/gcc 把debug注释掉版本号就不取消了,因为要看效果
配置:这里注意这条命令一定和最近版本的nginx安装时的命令一样,保证功能相同
./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx编译 make
不要make install
老版本的备份与新版本迭代:
保存备份老版本nginx cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-old
将生成的nginx去覆盖安装目录下的老的nginx cp -f objs/nginx /usr/local/nginx/sbin/nginx
获取当前nginx主进程pid ps ax|grep nginx
升级新程序 kill -USR2 21105 这是升级,不是杀进程查看新程序 ps ax|grep nginx
正确情况应该是下图,我的一直报错,此时用curl -I localhost,依旧不显示版本号
kill -WINCH 21105,此时新nginx接受全部工作,curl -I localhost显示版本号
关闭旧nginx的从进程,留下主进程方便后边版本回退
假如新版本性能很拉跨,怎么返回旧版本?版本回退:
还原nginx程序:# cp -f nginx.old nginx
唤醒原进程:# kill -HUP 29636
回收新版本的worker进程: kill -WINCH 29761
关闭新版本主进程: kill -QUIT 29761
版本平滑升级后进程的保留状态如下图:
1、 还原nginx程序:# cp -f nginx.old nginx
2、唤醒原进程:# kill -HUP 21423 此时旧版本未接手工作
3、回收新版本的worker进程: kill -WINCH 21521 此时旧版本开始接手工作
关闭新版本主进程: kill -9 21521 直接杀掉,用不上了
Limiting Access to Proxied HTTP Resources | NGINX Plus
参考文档
在nginx目录下建立新目录,准备图片一张,这里图片大小为1.1M
浏览器输入 http://172.25.73.1/download/haha.jpg
可以看到图片
ab -c10 -n10 http://172.25.73.1/download/haha.jpg
压力测试,c:10次并发数,n:10次请求 访问该网址
此时查看nginx服务器的日志文件 tail 10 /usr/local/nginx/logs/access.log 返回值均为200,访问成功
编辑nginx配置文件 ,在server模块里新加
limit_conn_zone $binary_remote_addr zone=addr:10m;server{...
location /download {
limit_conn addr 1; 限制并发数
}//$binary_remote_addr 表示通过remote_addr这个标识来做限制
//zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域
nginx -s reload后,客户端 输入 ab -c10 -n10 http://172.25.73.1/download/haha.jpg
继续查看日志,可以看到只成功了一个,也就是我们限制了只允许一个并发
配置文件修改如下
继续客户端的压力测试,依旧是只成功了一次
ab -c1-n10 http://172.25.73.1/download/haha.jpg
配置文件添加一句话 burst=5
处理服务的时间立刻变长了 ,最后压力测试显示一秒只能处理一个请求
加上nodelay
继续压力测试,无等待,但是有四个任务处理失败
配置文件修改如下
压力测试:ab -c1 -n1 http://172.25.73.1/download/haha.jpg
大概耗时五秒
打开浏览器某个目录能自动显示内容,类似软件仓库
配置文件修改如下 只加了一句话
修改前后效果查看:
一些公司介绍类的内容一般不会发生变化,设置有效期,用户端的缓存到期后更新
配置文件新增一模块:location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root html;
}
curl -I 172.25.73.1/download/haha.jpg
查看有效期是一年后到期
中文乱码 charset utf-8; 在全局位置下取消注释,浏览器中文乱码就会消失
/opt/新建脚本文件,该脚本功能是实现日志的自动备份
#!/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`
chmod +x /opt/nginx_log.sh 加入可执行权限
加入定时任务,实现自动备份
yum provides */ncursesw 查询软件可以这样查询
需要一个安装包,一个依赖包,一个yum源安装的包
rpm -ivh GeoIP-devel-1.5.0-13.el7.x86_64.rpm
yum install -y ncurses-devel
编译goaccess
tar zxf goaccess-1.4.tar.gzcd goaccess-1.4/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
交代日志位置
goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
此时goaccess会一直占用进程,ctrl+z打入后台
bg查看
172.25.73.1/report.html
浏览器输入后出现如下页面
客户端主机:ab -c1 -n1000 http://172.25.73.1/download/haha.jpg
日志端实时增加
配置文件新增status模块
location /status {
stub_status on; 打开监控
access_log off; 关闭不必要的日志记录,节省磁盘空间
}
浏览器搜172.25.73.1/
配置文件status模块加入ip限制
allow 172.25.73.2;
deny all;
在73主机和server2,分别curl 172.25.73.1/status
可以看到限制ip访问 设置生效了
配置文件,去掉选中行的注释
记住两个都是cert.pem
nginx -t 检测语法报错 ,因为缺少cert文件
接下来生成cert文件
/etc/pki/tls/certs 下查看MakeFIle文件
可以看到pem模块有ssl
make cert.pem 输入相关信息,生成 .pem 文件
mv cert.pem /usr/local/nginx/conf/
nginx -t 成功
nginx -s reload
这就相当于给了网站一个证书