vim修改"#user nobody;"
查看进程ps axu
设置之前不能使用systemctl start nginx等脚本,设置后可以。只需要添加nginx相应的脚本文件即可。
nginx官网查找添加nginx脚本文件方法:添加nginx.service文件在目录/lib/systemd/system/nginx.service
但是/lib是/usr/lib的软连接,所以添加文件地址为/usr/lib/systemd/system/nginx.service
上述nginx.pid只有nginx进程打开时才存在
重新加载配置:
systemctl daemon-reload #重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要使新服务的服务程序配置文件生效,需重新加载。
由于设置之前使用命令行nginx打开的nginx服务,必须使用命令行nginx -s stop关掉,使用脚本systemctl stop nginx关不掉。但是使用脚本启动systemctl start nginx,可以使用命令行nginx -s stop关掉。说明命令行的等级更高。
配置成功后可以使用脚本设置开机自启:systemctl enable --now nginx.service
一个work的并发连接数由1024改为65535(表示每个work同时可以处理的连接量,nginx可以用来解决并发过万连接),但是不会生效。
app上更改:
2.1 work进程更改:1、改为auto,自动设置
2、work线程和cpu核心数(lscpu查看)设置一样。本实验cpu两个线程,work进程设置为2,并且01、10对应起来(此方法好处:这样比较均衡,可以减少上下文切换的损耗,命中率更高,效率更高。)
2.2 work单个进程并发连接量更改为65535
更改server1上nginx配置文件:
补充:work进程更改使用方法2:如果是4个cpu核心,则设置4个work线程,且对应的worker cpu affinity参数为0001 0010 0100 1000;
此时reload后单个进程并发连接数=65535并不会生效
此时如果单个进程并发超过1024,日志里面会有大量报错,因为只是更改了app层面的限制,操作系统和内核还有限制。
因为设置限制关系kernel内核限制最大> system操作系统 > app。内核打开文件数由内存等决定(一般20万,满足要求),而操作系统对用户并发打开文件数默认为1024,不满足65535。操作只是在app上更改,操作系统没有更改。
内核查看并发打开文件数为200067,满足65535要求:
操作系统查看并发打开文件限制为1024,不满足65535要求,需要更改:
操作系统更改打开文件并发量,热插拔模块即改即生效
更改打开nginx的用户的并发文件数,参数优化1中把nginx默认用户从nobody改为nginx,所以下图使用nginx用户作为程序nginx的打开用户。
nginx之前版本1.20.2,下载新的版本1.21.6,并从原版本平滑升级到1.21.6,平滑升级过程nginx不用停止
下载1.21.6版本,解压;./configure和原版本命令相同;make编译(不要make install)
老进程由于做过隐藏版本处理,curl -I localhost访问显示server/;新进程会显示版本nginx/1.21.6
在nginx安装目录里面,备份原程序:(不能使用mv ,mv结果只有nginx.old,导致没有nginx出错)
拷贝新程序,并获取当前nginx主进程pid(此时仍是原nginx进程,pid=25971):
升级新程序,kill掉原nginx进程,新版本nginx被添加到进程里来(新的pid=26141):
新进程平滑接管:kill -WINCH 25971 回收老版本的worker进程
此时测试,新的nginx进程响应
还原nginx程序:# cp -f nginx.old nginx
回收新版本的worker进程: kill -WINCH 26141
此时测试,老进程响应
关闭新版本主进程: kill -QUIT 26141/kill -9 26141
nginx作Web服务器
5.1:控制单IP线程并发连接数
实验准备:在nginx默认发布目录下创建download 目录,放入一张496K图片(大一点)
压测:客户端38上压测:38上面压测结果不准确,直接去server1上查看日志
-c表示开10个线程,-n表示访问10次,分10个线程访问10次
web服务器server1上查看日志得到压测结果:10次200表示全成功
配置nginx.conf:限制并发线程数为1,带宽为50k
使配置生效:nginx -s reload
再次压测:客户端38上再次压测:
server1查看日志:9此503失败,1次200成功。因为限制线程并发数为 1,开10线程访问10次,只有一个线程成功。
5.2 限制单位时间内的请求数目
配置nginx.conf,使配置生效:nginx -s reload
客户端38上再次压测:上一实验限制了线程数为1,故c1线程数=1,否则出错
server1查看日志:9次失败,因为每秒并发一个,并且只能处理一个
上面改为limit_req zone=one burst=5;压测后查看日志,全部成功burst(表示排队,不管值是多少,都会成功)
再次更改为 limit_req zone=one burst=5 nodelay;压测后查看日志,6次成功(处理完排队的5个后就不处理了)
5.3限制带宽
限制为200k,reload nginx。
压测访问10次,并发数为1,所以大概20s
设置nginx配置:autoindex on
7 设置缓存:缓存可以降低网站带宽,加速用户访问。缓存过期时间365d
8 日志轮询:: 频繁访问导致日志太多,所以要每天00:00备份前一天日志,并创建新的
nginxlog.sh文件
crontab -e定时任务文件:
软件安装:
# wget https://tar.goaccess.io/goaccess-1.4.tar.gz 下载安装包
# tar -xzvf goaccess-1.4.tar.gz 解压
# cd goaccess-1.4/
# ./configure --enable-utf8 --enable-geoip=legacy 时缺少两个依赖开发包需要安装
# make 编译
# make install 安装
软件使用:
# goaccess access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
下载安装包,解压,./configure 时
./configure缺少GeoIP和ncursesw,开发包一般都以devel结尾。(可以去阿里云上找到)
依赖包GeoIP没找到,直接lftp,rpm -ivh安装
补充:查找软件开发包方法:一般开发包以-devel结尾
yum search GeoIP;在你的仓库中寻找,关键看搭建的仓库(yum search +软件名或者关键字 //查找相关功能的包,然后下载yum install)
rpm -q GeoIP;-q :仅查询,后面接的套件名称是否有安装;
yum provides */ncursesw反查询文件在什么包中
依赖包 ncursesw找到直接安装
依赖开发包安装完后在goaccess-1.4目录下,执行./configure --enable-utf8 --enable-geoip=legacy ;make;make install完成安装
goaccess使用
浏览器上访问:当被访问日志增加时,网页实时增加。
10.中文乱码:nginx发布目录indes.html有中文的话浏览器访问乱码,解决nginx.conf中更改
浏览器缓存清理后在次访问
站点目录和文件的限制:
location ~ ^/images/.*\.(sh|php)$
{ deny all; }
以images开头,sh和ph结尾的全部禁止访问。
13.SSL模块使用:使nginx发布目录可以被加密访问
打开注释并更改:
使用Makefile文件make
nginx开放443端口,可以加密访问,curl -k加密访问
1.3第4
14.nginx 重定向
防止域名恶意解析到服务器IP: 将大量域名绑定到服务器的IP上,会耗消网站的流量
所以当访问ip时后,返回500错误
访问IP时,默认由第一个虚拟主机进行处理,http{}里有很多server{}
server { listen 80;
server_name _;
return 500;
}
也可以重定向,返回域名:
server { listen 80;
server_name _;
rewrite ^(.*) http://www.westos.org permanent;
}
两次更改配置文件内容和结果
14.2 www.westos.org/bbs 重定向bbs.westos.org:(例如CCTV6有独立的域名,CCTV包含各种cctv频道,想使用CCTV/6 来访问CCTV6;www.westos.org/bbs时老的访问方法,bbs.westos.org时新的域名,想使用老的方法访问新的域名)
把bbs.westos.org域名添加到172.25.254.1上
14.3bbs.westos.org 重定向www.westos.org/bbs:
15nginx 防盗链
盗链:server1上有图片,server2上在httpd发布目录里面写入server1图片地址,就可以直接访问server2域名来看到server里面的图片,防盗连即在server1 nginx配置文件中写入相应参数来禁止访问server2查看server1上图像。
server1上图像地址:
38主机域名访问:
盗链:更改server2httpd发布目录/var/www/html/index.html,访问ip172.25.254.2来查看server1上图片
防盗连:
正常域名访问可以,其他域名不可以。server1上更改
1、return 403时(下图所示)
2、还可以重定向到其他站点,防止消耗本站点流量:重定向到bbs.westos.org
nginx官方文档:
Limiting Access to Proxied HTTP Resources | NGINX Plus