LAMP架构之2——nginx搭建七层负载均衡

目录

一、nginx的下载与安装

二、nginx的配置

三、nginx的测试

四、nginx的其他配置

五、nginx的应用扩展

六、nginx的并发优化

七、nginx的平滑升级

八、nginx限流

九、nginx自动索引

十、nginx自动缓存设置

十一、nginx的日志轮询

十二、nginx的日志可视化管理——goaccess

十三、nginx的实时访问监控

十四、nginx默认发布页面的中文显示

十五、nginx的加密访问控制——https

十六、nginx的重定向

十七、nginx的防盗链

本章总结


一、nginx的下载与安装

nginx官方文档:

nginx documentationhttp://nginx.org/en/docs/

(1)解压文件安装包

 (2)源码编译三部曲之第一步:<./configure>

这一步是校验软件与操作系统的依赖性的。

以下参数分别表示 安装的模块和指定的路径(自编译软件一般都指定在如下路径),然后根据校验结果安装相应的依赖。

 下图显示缺少PCRE依赖,所以导致相关的模块无法进行安装。

安装时在相应的模块名称后添加<-devel>,所有依赖的开发包后缀都是这样。

 源码编译三部曲之第二步:<make>

上一步检查完依赖性通过后,会在当前目录下生成<Makefile>目录,可以直接使用make命令编译。

编译完成后会在当前目录下生成二进制安装文件

  源码编译三部曲之第三步:<make install>

安装时必须在源码的一级目录下。

 (3)nginx的使用

安装完成后,进入到刚才指定的安装目录下,这里包含了软件的所有配置文件。

 为了方便使用,对应用创建一个软链接(通俗点讲也就是快捷方式)。

 检测语法,启动程序,查看进程。

启动后nginx程序就可以使用了。进程列表中也出现了相应进程。

<nginx>        #启动nginx

<nginx -s stop>        #关闭nginx

 注意:如下图所示,当80端口被占用时,启动将会失败

 (4)nginx的默认发布目录

在本机或远程主机访问装有nginx的服务器时,会自动显示nginx的发布目录。测试如下:

二、nginx的配置

(1)编辑nginx的主配置文件

 具体更改如下:

添加RS主机及端口

 添加server,表示的是,所有通过80端口访问www.westos.org的请求都会转发的<westos>模块下,这个模块就是上一步添加RS主机的模块。

配置更改完成后需要检测语法并重新载入nginx的配置

nginx -t             #检测nginx语法
nginx -s reload        #重新载入nginx配置
nginx -s stop        #关闭nginx

三、nginx的测试

在客户机中设置解析,将上一步中设置的www.westos.org解析为server1的真实IP地址。

客户机进行多次访问后,可以看到已经通过nginx实现负载均衡了。

基本原理是,当访问www.westos.org域名后,解析到server1的VS服务器上,服务器上的nginx将对访问这个域名的请求均衡到两台westos域的RS主机上(也就是上一步中更改nginx配置时做的改动)。从而实现了负载均衡。

 注意:nginx相对于之前的方法优点是:(1)自带健康检测功能,(2)不用配置RS主机的临时IP地址(172.25.254.100)

四、nginx的其他配置

(1)、nginx.conf配置文件中的backup表示,当检测到后端的所有RS主机故障后,就自己上。

 测试:在客户机中访问<www.westos.org>,访问到的是调度器本机!

 (2)、nginx.conf配置文件中设置RS服务器的权重。

 测试:在客户机中测试,负载按照RS权重比例分配。

 (3)nginx.conf配置文件中设置ip_hash实现客户端IP和RS服务器一对一。

 测试:在客户机中访问VS调度服务器,只会分配到第一个RS

 (4)nginx.conf配置文件中设置节点下线

常用于RS节点维护时,将节点下线。

 测试:关闭了server2节点后,客户机访问时只能访问server3

五、nginx的应用扩展

本次用到的扩展包名:nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

由于nginx是静态编译,所以每次增加新功能时都需要重新编译。

(1)增加扩展包需要重新编译,所以需要先进入nginx源路经执行<make clean>命令删除编译。

make clean    #删除编译

 (2)重新编译: 最后一项为扩展包路径

 编译完成后,将指定文件<nginx-1.20.2/objs/nginx>复制到</usr/local/nginx/sbin/>目录下

(3)编译时的优化设置

——压缩编译大小

 ——隐藏nginx的版本信息

 测试:隐藏前

 隐藏后:

 (4)扩展功能应用——基于浏览器cookie的认证

先更改nginx配置文件

然后,测试:

在浏览器中访问<www.westos.org>,可以看到无论刷新多少次,访问的始终是server2

清除浏览器的缓存后,重新进入网站,可以看到已经切换到server3。但是无论刷新多少次,仍然一直是server2。想要改变的话,就得重新清除浏览器缓存了。

 开启浏览器的页面审查,可以看到当前页面是基于cookie的,只要cookie不变,页面也不会变化。

六、nginx的并发优化

(1)为nginx创建用户,并更改配置文件指定用户

 测试:nginx程序的用户已指定为nginx用户了

 (2)nginx开机启动脚本

编辑脚本:

在目录</usr/lib/systemd/system>下编辑<nginx.service>文件,文件内容从上述网站中复制,其中需要改动的地方下图已框出(和nginx软件的安装目录一致)

测试:先关闭nginx,然后使用systemctl脚本启动nginx

nginx -s stop        #关闭nginx
systemctl start nginx        #启动nginx

(3)nginx调优之

——调整可调用CPU数量。

进入nginx的安装目录下,按以下步骤更改配置文件。

推广:多核心的分配与绑定

worker_processes     2;  //最多开启8个

worker_cpu_affinity 01 10;  //cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭

 ——并发连接数

先更改配置文件:可以连接到65535个并发过万。也就是每个worker同时可以处理的连接量。

 再更改系统中的限制查看系统默认硬件限制。更改系统对APP硬件资源的限制。

更改系统对APP硬件资源的限制(和上一步中的并发连接数设定一致)。注意:此文件即改即生效。

注意:

worker_processes      //工作进程数

worker_connections      //单个工作进程并发连接数

nginx作为http服务器时:max_clients = worker_processes * worker_connections

nginx作为反向代理服务器时:max_clients = worker_processes * worker_connections / 2

七、nginx的平滑升级

(1)下载nginx的新版本的安装包,并解压,同时按照上述方法关闭debug和隐藏版本信息。

(2)检测新版本的依赖性,并指定安装路径(和之前一模一样)

./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --add-module=/mnt/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

(3)直接<make>

 (4)备份旧版本程序

 (5)将新版本的程序复制到</usr/local/nginx/sbin/>目录下

注意:由于目标路径已经存在此文件,所以需要加上参数<-f>强制复制

(6)记录正在运行的nginx的主进程的<pid>

(7)升级新程序

强制关闭旧程序的主进程pid,会在下边出现一个新的主进程。

kill -USR2 17151        #用到旧版本的pid

(8)接管nginx

kill -WINCH 26941    #这里用到旧版本的pid号

(9)测试

curl命令访问本机,可以看到nginx已经升级。

注意:这个过程是平滑的。也就是说,在客户端感受不到VS服务器升级的过程。

 (10)nginx版本回退——四步走

*还原nginx程序: cp -f nginx.old nginx

*唤醒原进程:kill -HUP nginx

*回收新版本的worker进程:kill  -WINCH  27066

关闭新版本主进程:kill  -9  27066

 测试:虽然新版本的进程也在,但是只有旧版本的进程生效。

 关闭新版本进程

八、nginx限流

 在nginx的默认发布目录</usr/local/nginx/html/download>中放一个500K的文件,通过客户机下载来测试限流。

 这时候在浏览器中已经可以访问了。

(1)更改nginx配置文件的并发连接数

第一个框表示先创建一个10M的内存区域,名称为addr。第二个框表示并发连接数为1

 测试:在客户端进行如下压力测试

ab -c10 -n10 http://172.25.254.1/download/iso7.gif
压力测试,-c10表示10个并发,-n10表示请求10次

 查看server1的日志,是次访问中只有一次成功。意味着并发连接数最多为1.

 (2)更改nginx配置文件的请求速率

第一个框表示每秒请求率为1r。

 测试:在客户端进行如下压力测试

ab -c1 -n10 http://172.25.254.1/download/iso7.gif
压力测试,-c1表示1个并发,-n10表示请求10次

nginx更改前:在server1的日志中看到10个请求都成功。

nginx更改后:由于每秒钟钟只能处理一个请求,所以在server1的日志中看到10个请求只成功了一个。

(3)限制速率后如何处理过多的请求——排队

 测试:在客户端测试,10个请求用时9秒多

 查看server1的nginx的日志,可以看到限流了,但是每个请求都成功了

 (4)限制流量

测试:

ab -c1 -n10 http://172.25.254.1/download/iso7.gif

 nginxg限流前:

 nginx限流后:可以看到总量不辨,限制100k后共需要20秒

九、nginx自动索引

测试:通过浏览器访问 发布目录时,无法访问目录下的索引,只能显示具体的文件。

更改配置:

重新载入nginx配置后测试:

十、nginx自动缓存设置

一般用于网站静态图片等,可以有效降低网站带宽,加速用户访问。

更改配置文件:表示html发布目录下的gif等格式的文件缓存365天更新一次。

 测试:在客户端中使用curl命令进行测试,可以查看到过期时间为一年之后。

十一、nginx的日志轮询

一般服务器的访问量会导致nginx的日志增长非常快,所以需要对时间久的日志做一个备份/截断。

创建脚本——<vim /opt/nginx_log.sh>。并添加可执行权限——<chmod +x /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`

 然后添加定时任务:每天整点执行此脚本来截断/备份日志。

效果测试:

执行此脚本后,产生了 一个备份的日志文件。原本的日志文件已经清零。

十二、nginx的日志可视化管理——goaccess

 (1)下载并解压软件包:

(2)源码编译三部曲:

检查依赖性:

 ./configure --enable-utf8 --enable-geoip=legacy

发现缺少这个依赖性,所以安装这个依赖性的软件包

发现缺少这个开发包,安装!

 make:

make install:

最后默认安装到这个目录下

(3) 添加监控命令

goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --log-format=COMBINED --real-time-html
#日志读取目录,输出为nginx发布目录的report.html文件,设置日志格式,显示时间

 这个命令执行后,会占用终端,可以使用<Ctrl + z>和<bg>将其打入后台。

(4)测试:在浏览器中输入server1的report页面,显示如下。

十三、nginx的实时访问监控

由于之前编译nginx的时候添加了status模块,所以可以在配置文件中直接调用。

 这个模块功能是实时统计访问情况。

测试结果:

 实时监控的优化:

新增的三条分别为:关闭本机访问记录,允许本机访问,禁止其他所有用户访问

在次测试:

由于只允许本机用户访问,所以浏览器无法访问。但可以通过本机的命令行查看到。

十四、nginx默认发布页面的中文显示

在nginx的默认发布页面中编辑一段中文。通过浏览器访问到为乱码。

 更改配置文件:

设置字体<charset utf-8;>

清除浏览器缓存后重新测试:站点可以正常显示中文。

十五、nginx的加密访问控制——https

 但是会报错:原因是没有证书。所以接下来要创建证书

 创建证书:

 移动证书并重新载入配置:

 测试:证书完成后,查看到443端口已启用,就可以通过加密访问

 浏览器中测试:由于证书为经过认证,所以会提示有风险。

十六、nginx的重定向

防止网站被恶意攻击致瘫痪,可以限制用户对网站的访问,将用户的访问请求重定向到一个固定值或者其他网站。

(1)防止域名恶意解析到服务器IP:

 测试:

在客户端中使用curl命令访问nginx服务器IP,可以看到被重定向到一个固定值。

(2)重定向到指定网站:(用于引流)

测试:

在客户机中使用curl命令测试,可以看到此IP已经重定向到指定网站了。再测试指定网站,访问请求被正常调度到了负载均衡节点上。

(3)重定向到指定端口——<80/http>重定向到<443/https>

当通过域名访问时,就会重定向到上一模块的443端口,然后通过443端口访问<www.westos.org>

 测试:

在客户端通过curl命令看到301表示永久重定向(302表示临时),通过浏览器访问,自动跳转到<https>。

 (4)多层重定向——www.westos.org/bbs 重定向bbs.westos.org:

定义一个网站<bbs.westos.org>,并在客户端设置好解析。

需要实现的功能是:当访问<www.westos.org>时,可以正常访问;当访问<www.westos.org/bbs>时,实际上跳转到<bbs.westos.org>网站上。

测试:

通过curl命令可以看到访问<www.westos.org/bbs>时,已经被重定向到<bbs.westos.org>上了

但是,当访问<www.westos.org/bbs>后再添加字符时,就会产生404错误。为了解决这个问题,可以nginx的重定向后语句后添加一个<$1>,意思是匹配任意字符

优化前后对比:

 (5)bbs.westos.org 重定向www.westos.org/bbs:

 复制bbs.westos.org目录的发布文件到www.westos.org的发布目录下

测试:

当访问bbs.westos.org的时候,会自动重定向到<www.westos.org/bbs>

十七、nginx的防盗链

防盗链:防止网站正常显示从其他网站盗取过来的文件,对文件的原网站是一种侵权。

在一台RS服务器的apache的发布页面中,盗取以下网站的图片。

 在浏览器中访问server2的IP,可以直接看到原网站的图片。

分析,这个server2上并没有图片,而这里显示的图片是从<www.westos.org>中盗取来的。

 为了防止这种情况的产生,需要在图片所在主机中开启防盗链功能。

表示只有通过<www.westos.org>访问图片时,可以访问。否则一律拒绝。

测试:

 也可以使用盗链重定向

如果不是通过域名访问的,可以将访问文件重定向到指定文件。

测试:

在之前的<bbs.westos.org>目录下放入下图,通过盗链访问的话,会重定向到此图

注意:一般来说,防盗链重定向时,尽量不要重定向到自己的域名,因为这样消耗的也是自己网站的流量 

本章总结

1、nginx官方文档

Admin Guide | NGINX Plushttps://docs.nginx.com/nginx/admin-guide/

2、nginx的反向代理机制

当客户端访问VS调度器时,调度器访问后端的RS节点,RS节点服务器中实际看到的是VS访问。也就是说整个过程中RS对客户端是透明的。VS根据客户端的请求从RS中拿到数据,再以自己的名义反馈给客户端。客户端只能看到VS,而不能看到RS,起到了保护RS的作用

3、nginx的默认发布目录

 转发到westos模块中列出来的设备

4、nginx中的location的优先级

nginx的location优先级 - Captain_Li - 博客园

5、http状态码

http状态码200,300,404等是什么意思 - cjwxf - 博客园

6、nginx的中文显示乱码,可以把字符集设置添加在全局变量中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值