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/

LAMP架构之2——nginx搭建七层负载均衡_第1张图片

(1)解压文件安装包

LAMP架构之2——nginx搭建七层负载均衡_第2张图片

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

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

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

LAMP架构之2——nginx搭建七层负载均衡_第3张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第4张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第5张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第6张图片

  源码编译三部曲之第三步:

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

 (3)nginx的使用

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

LAMP架构之2——nginx搭建七层负载均衡_第7张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第8张图片

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

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

        #启动nginx

        #关闭nginx

LAMP架构之2——nginx搭建七层负载均衡_第9张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第10张图片

 (4)nginx的默认发布目录

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

LAMP架构之2——nginx搭建七层负载均衡_第11张图片

二、nginx的配置

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

LAMP架构之2——nginx搭建七层负载均衡_第12张图片

 具体更改如下:

添加RS主机及端口

LAMP架构之2——nginx搭建七层负载均衡_第13张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第14张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第15张图片

三、nginx的测试

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

LAMP架构之2——nginx搭建七层负载均衡_第16张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第17张图片

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

四、nginx的其他配置

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

LAMP架构之2——nginx搭建七层负载均衡_第18张图片

 测试:在客户机中访问,访问到的是调度器本机!

LAMP架构之2——nginx搭建七层负载均衡_第19张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第20张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第21张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第22张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第23张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第24张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第25张图片

五、nginx的应用扩展

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

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

LAMP架构之2——nginx搭建七层负载均衡_第26张图片

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

make clean    #删除编译

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

LAMP架构之2——nginx搭建七层负载均衡_第27张图片

 编译完成后,将指定文件复制到目录下

LAMP架构之2——nginx搭建七层负载均衡_第28张图片

(3)编译时的优化设置

——压缩编译大小

LAMP架构之2——nginx搭建七层负载均衡_第29张图片

 ——隐藏nginx的版本信息

LAMP架构之2——nginx搭建七层负载均衡_第30张图片

 测试:隐藏前

 隐藏后:

LAMP架构之2——nginx搭建七层负载均衡_第31张图片

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

先更改nginx配置文件

然后,测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第32张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第33张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第34张图片

六、nginx的并发优化

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

LAMP架构之2——nginx搭建七层负载均衡_第35张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第36张图片

 (2)nginx开机启动脚本

编辑脚本:

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

LAMP架构之2——nginx搭建七层负载均衡_第37张图片

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

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

(3)nginx调优之

——调整可调用CPU数量。

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

LAMP架构之2——nginx搭建七层负载均衡_第38张图片

LAMP架构之2——nginx搭建七层负载均衡_第39张图片

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

worker_processes     2;  //最多开启8个

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

LAMP架构之2——nginx搭建七层负载均衡_第40张图片

 ——并发连接数

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

LAMP架构之2——nginx搭建七层负载均衡_第41张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第42张图片

更改系统对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

LAMP架构之2——nginx搭建七层负载均衡_第43张图片

(3)直接

LAMP架构之2——nginx搭建七层负载均衡_第44张图片

 (4)备份旧版本程序

LAMP架构之2——nginx搭建七层负载均衡_第45张图片

 (5)将新版本的程序复制到目录下

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

LAMP架构之2——nginx搭建七层负载均衡_第46张图片

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

(7)升级新程序

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

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

LAMP架构之2——nginx搭建七层负载均衡_第47张图片

(8)接管nginx

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

LAMP架构之2——nginx搭建七层负载均衡_第48张图片

(9)测试

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

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

LAMP架构之2——nginx搭建七层负载均衡_第49张图片

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

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

*唤醒原进程:kill -HUP nginx

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

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

LAMP架构之2——nginx搭建七层负载均衡_第50张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第51张图片

 关闭新版本进程

LAMP架构之2——nginx搭建七层负载均衡_第52张图片

八、nginx限流

LAMP架构之2——nginx搭建七层负载均衡_第53张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第54张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第55张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第56张图片

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

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

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

LAMP架构之2——nginx搭建七层负载均衡_第57张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第58张图片

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

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

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

LAMP架构之2——nginx搭建七层负载均衡_第59张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第60张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第61张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第62张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第63张图片

 (4)限制流量

LAMP架构之2——nginx搭建七层负载均衡_第64张图片

测试:

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

 nginxg限流前:

LAMP架构之2——nginx搭建七层负载均衡_第65张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第66张图片

九、nginx自动索引

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

LAMP架构之2——nginx搭建七层负载均衡_第67张图片

更改配置:

LAMP架构之2——nginx搭建七层负载均衡_第68张图片

重新载入nginx配置后测试:

LAMP架构之2——nginx搭建七层负载均衡_第69张图片

十、nginx自动缓存设置

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

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

LAMP架构之2——nginx搭建七层负载均衡_第70张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第71张图片

十一、nginx的日志轮询

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

创建脚本——。并添加可执行权限——

#脚本内容
#!/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`

LAMP架构之2——nginx搭建七层负载均衡_第72张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第73张图片

效果测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第74张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第75张图片

(2)源码编译三部曲:

检查依赖性:

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

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

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

LAMP架构之2——nginx搭建七层负载均衡_第76张图片

 make:

make install:

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

LAMP架构之2——nginx搭建七层负载均衡_第77张图片

(3) 添加监控命令

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

 这个命令执行后,会占用终端,可以使用将其打入后台。

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

LAMP架构之2——nginx搭建七层负载均衡_第78张图片

十三、nginx的实时访问监控

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

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

LAMP架构之2——nginx搭建七层负载均衡_第79张图片

测试结果:

LAMP架构之2——nginx搭建七层负载均衡_第80张图片

 实时监控的优化:

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

LAMP架构之2——nginx搭建七层负载均衡_第81张图片

在次测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第82张图片

LAMP架构之2——nginx搭建七层负载均衡_第83张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第84张图片

 更改配置文件:

设置字体

LAMP架构之2——nginx搭建七层负载均衡_第85张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第86张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第87张图片

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

 创建证书:

LAMP架构之2——nginx搭建七层负载均衡_第88张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第89张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第90张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第91张图片

十六、nginx的重定向

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

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

LAMP架构之2——nginx搭建七层负载均衡_第92张图片

 测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第93张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第94张图片

测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第95张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第96张图片

 测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第97张图片

LAMP架构之2——nginx搭建七层负载均衡_第98张图片

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

定义一个网站,并在客户端设置好解析。

需要实现的功能是:当访问时,可以正常访问;当访问时,实际上跳转到网站上。

LAMP架构之2——nginx搭建七层负载均衡_第99张图片

测试:

通过curl命令可以看到访问时,已经被重定向到上了

LAMP架构之2——nginx搭建七层负载均衡_第100张图片

LAMP架构之2——nginx搭建七层负载均衡_第101张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第102张图片

优化前后对比:

LAMP架构之2——nginx搭建七层负载均衡_第103张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第104张图片

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

LAMP架构之2——nginx搭建七层负载均衡_第105张图片

测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第106张图片

十七、nginx的防盗链

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

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

LAMP架构之2——nginx搭建七层负载均衡_第107张图片

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

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

LAMP架构之2——nginx搭建七层负载均衡_第108张图片

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

表示只有通过访问图片时,可以访问。否则一律拒绝。

LAMP架构之2——nginx搭建七层负载均衡_第109张图片

测试:

LAMP架构之2——nginx搭建七层负载均衡_第110张图片

 也可以使用盗链重定向

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

LAMP架构之2——nginx搭建七层负载均衡_第111张图片

测试:

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

LAMP架构之2——nginx搭建七层负载均衡_第112张图片

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

本章总结

1、nginx官方文档

Admin Guide | NGINX Plushttps://docs.nginx.com/nginx/admin-guide/LAMP架构之2——nginx搭建七层负载均衡_第113张图片

2、nginx的反向代理机制

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

3、nginx的默认发布目录

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

LAMP架构之2——nginx搭建七层负载均衡_第114张图片

4、nginx中的location的优先级

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

LAMP架构之2——nginx搭建七层负载均衡_第115张图片

5、http状态码

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

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

你可能感兴趣的:(nginx,运维,linux)