LNMP架构2——nginx(下)

cookie算法访问服务器

  • 在多台后台服务器的环境下,为了确保一个客户只和一台服务器通信,势必使用长连接。常见的有使用nginx自带的ip_hash来做,但如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器。如果基于cookie可以在保持长连接的同时还保证了服务器的压力均衡,ngx_http_sticky_module可以实现此功能。
  • 客户端client请求访问服务 -> DNS服务器将域名解析到cdn -> cdn(nginx,squid,varnish)反向代理 -> nginx反向代理到后端服务器取东西 -> webserver

下载解压ngx_http_sticky_module

[root@server1 /mnt]# yum install -y unzip.x86_64
[root@server1 /mnt]# unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

在nginx源码文件夹中重新预编译,添加此模块
重新编译,覆盖之前的二进制文件,编辑配置文件添加模块

[root@server1 /mnt/nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/mnt/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
[root@server1 /mnt/nginx-1.20.1]# make
[root@server1 /mnt/nginx-1.20.1/objs]# \cp -f /mnt/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/nginx

先按f12,再按f5刷新,即可查看到cookie访问记录,且采用cookie的方式访问时会锁定服务器,避免切换服务器时都需要每次输出密码的麻烦
在这里插入图片描述

在这里插入图片描述

限制对代理 HTTP 资源的访问

使用 NGINX 和 NGINX Plus,可以限制:
1、每个键值的连接数(例如,每个 IP 地址)
2、每个键值的请求率(一秒或一分钟内允许处理的请求数)
3、连接的下载速度
请注意,IP 地址可以在 NAT 设备后面共享,因此应谨慎使用 IP 地址限制。
限制连接数

vim nginx.conf
nginx -s reload

在这里插入图片描述
创建download目录放一张图

[root@server1 /usr/local/nginx/html/download]# mkdir /usr/local/nginx/html/download
[root@server1 /usr/local/nginx/html/download]# mv 'Screenshot from 2021-09-05 10-15-42.png' vim.jpg

重载nginx,浏览器访问成功
在这里插入图片描述
做压测,-c并发数10,-n请求数10,即10个请求一起发送,因为我们上边做了限制,所以会有访问失败的请求

[root@foundation25 Pictures]# ab -c10 -n 10 http://172.25.25.1/download/vim.jpg

在这里插入图片描述
大部分请求都失败,日志是准确的,要到日志里看

[root@server1 /usr/local/nginx/html/download]# cat /usr/local/nginx/logs/access.log 

在这里插入图片描述
将并发数改为1即符合我们的限制,不会有失败的
在这里插入图片描述
限制请求率

  • 速率限制可用于防止 DDoS(分布式拒绝服务攻击) 攻击,或防止上游服务器同时被过多请求淹没。该方法基于以下leaky bucket
  • 算法:请求以各种速率到达存储桶并以固定速率离开存储桶。

修改配置文件,用limit_req_zone 指令设置参数。该指令是在http {}级别上定义的, 这种方法允许将不同的区域和请求溢出参数应用于不同的上下文。我们设置允许相同标识的客户端的访问频次,这里限制的是每秒1次
在这里插入图片描述
压测,超过速率的9个全部失败
在这里插入图片描述
处理过多的请求

  • 请求仅限于符合limit_req_zone 指令中定义的速率。如果请求数量超过指定的速率并且共享内存区域已满,NGINX 将响应错误。由于流量往往是突发的,因此在流量突发期间返回错误以响应客户端请求并不是最好的情况。
  • NGINX 中这种过多的请求可以被缓冲和处理。limit_req 指令的burst参数设置等待以指定速率处理的最大请求数

修改配置文件,超出zone限制的请求会被放入数目为5的队列中。重载nginx
在这里插入图片描述
现在虽然超过了我们设置的只允许一秒一个请求,但可以被放入队列中,一秒处理一个,最后只用了9秒多是因为请求本身就不用多久,第十个已经是最后一个了,请求完自然就结束了
在这里插入图片描述
只排一次队
即第一秒处理一个,多的放入容纳5个请求的队列,再多的就直接被拒绝
在这里插入图片描述
重载nginx访问。如下,因为我们请求了10次所以1+5只会有6个成功
在这里插入图片描述
限制带宽
在这里插入图片描述
请求10次,一次大概两秒
在这里插入图片描述

自动索引:下载方便

当访问location时未指定路径,且路径下无主页文件时,开启自动索引将会显示该location的目录结构
在这里插入图片描述

Nginx expire缓存配置

Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问
访问server/path/x.jpg时,将会访问nginx工作目录下的html下的path内的x.jpg
在这里插入图片描述

日志轮询

[root@server1 nginx]# cd /opt/
[root@server1 opt]# ls
[root@server1 opt]# vim nginx.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`

在这里插入图片描述
给脚本执行权限直接执行,可以看到日志记录成功
在这里插入图片描述
添加crontab任务以实现每24小时即一天记录一次日志

crontab -e
00 00 * * * /opt/scripts/nginxlog.sh &> /dev/null
chmod -R 700 /usr/local/nginx/logs

中文乱码

先往测试页面写入写中文
在这里插入图片描述
浏览器访问,有乱码
在这里插入图片描述
修改配置文件
在这里插入图片描述

重载nginx,清理浏览器缓存后重新访问
在这里插入图片描述

防止域名恶意解析到服务器IP

  • 防止域名恶意解析到服务器IP(有的网站会把域名解析到你的网站地址上去),需要在访问时配置拒绝的域名到服务器ip的解析,可以设置访问哪个域名就被拒绝返回500状态码

本地做了简单测试
在这里插入图片描述
在这里插入图片描述

重定向

比如访问我哪个域名就会定向到我指定的网页,我还是用本地做了测试
在这里插入图片描述
访问显示301重定向
在这里插入图片描述

输入ip访问,重定向到了指定网页
在这里插入图片描述
80->443 80端口转至443端口
修改配置文件,对如图内容取消注释,启用443,修改证书密钥文件名
在这里插入图片描述
添加重写规则
在这里插入图片描述
使用脚本生成pem文件
在这里插入图片描述
将生成的pem拷贝至nginx conf目录下
在这里插入图片描述
重新加载nginx,查看端口是否打开
在这里插入图片描述
访问http:server,会重定向至https
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾几人要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值