Nginx反向代理+负载均衡+健康探测+缓存

释放双眼,带上耳机,听听看~!

由于apache具有良好的稳定性,但不能提供大量的连接并发请求;而nginx能够提供强大的连接并发请求而没有很好的稳定性,结合这两种截然不同的特征**,可以在内网的前端使用nginx作为反向代理服务器**,后方的apache作为原始服务器,这样既满足大量的连接并发请求,也具有良好的稳定性,当然,前端应该使用多台nginx反向代理,由于是实验环境,这里就使用一台作为演示,具体的拓扑示意图如下:

 

一、nginx反向代理

nginx作为一个代理服务器,至少需要两块网卡来同时连接外网和内网

网卡设置好之后就要安装nginx了,具体的安装步骤参考《linux下实现lnmp环境》中的第二步“安装nginx”,这里不再列出详细的安装过程了。安装完成之后修改/etc/nginx/nginx.conf文件

前端nginx代理的工作完成之后就要搭建后方的lamp环境了,搭建lamp环境不是这篇文章的重点,所以过程我这也不再列出来了,参考《lamp环境搭建–源码安装 》。lamp环境完成之后在Server1上新建一个默认页面。

然后用外网的一台主机访问代理服务器测试一下:

虽然实现了反向代理的功能,但不能满足大量的连接并发请求,因为在nginx接受到客户端的询问后依然是从后方的服务器中请求数据,其满足的并发连接请求量依然受apache的制约,甚至说多了一个向后查询的过程,其效率还不如没有这个代理,可以把apache装起来,用其自带的压力测试工具ab测试一下:

[root@server1 ~]# ab -c 100 -n 10000 http://172.16.10.100/test.jpg

直接向后方请求数据时可以满足的请求为每秒2241.49个

[root@server1 ~]# ab -c 100 -n 10000 http://202.196.10.123/test.jpg

而通过前端nginx反向代理服务器之后能满足的请求不增反减,这就需要nginx有本地缓存的支持了

 

 

二、反向代理+负载均衡+健康探测+缓存

由于设置缓存也是修改nginx的配置文件,所以接下来将负载均衡、健康探测和缓存放在一起做

1、反向代理+负载均衡+健康探测

由于nginx的源码包安装并不支持健康探测,所以需要给nginx的源码打上补丁之后重新配置、编译并安装

Nginx反向代理+负载均衡+健康探测+缓存

Nginx反向代理+负载均衡+健康探测+缓存

Nginx反向代理+负载均衡+健康探测+缓存

Nginx反向代理+负载均衡+健康探测+缓存

[root@server1 nginx-1.0.11]#vim /etc/nginx/nginx.conf

Nginx反向代理+负载均衡+健康探测+缓存

upstream backend /////定义后方的服务器群组

Server 172.16.10.100 weight=1 /////指明后方的一台服务器地址,权重设置为1

Server 172.16.10.101 weight=1 /////指明后方的另一台服务器地址,权重设置为1

healthcheck_enable /////开启健康探测功能

healthcheck_delay 1000 /////设置健康检测的时延

healthcheck_timeout 1000 /////设置健康检测的超时时间

healthcheck_failcount 1 /////后方某台服务器有一次检测不到即视为宕掉

healthcheck_send "GET /.health HTTP/1.0" /////使用GET方法访问后方服务器站点下的.health来进行探测

proxy_pass http://backend /////与upstream backend相对应,在访问202.196.10.123或www.abc.com时将流量转发到backend组

location /stats /////定义一个站点,用来查看后方服务器的健康状况

将nginx重启

在后方的两台服务器上新建两个健康探测页面".health",内容是什么都行,只要前端nginx能够成功访问这个探测页面即可

这是Server1

Nginx反向代理+负载均衡+健康探测+缓存

这是Server2

Nginx反向代理+负载均衡+健康探测+缓存

再次在外网的主机上访问202.196.10.123

Nginx反向代理+负载均衡+健康探测+缓存

Nginx反向代理+负载均衡+健康探测+缓存

可以通过访问根目录下的stats来查看后方服务器的状态

Nginx反向代理+负载均衡+健康探测+缓存

上面显示后方两台服务器都正常

关闭Server1的httpd服务

Nginx反向代理+负载均衡+健康探测+缓存

再次查看后方服务器的状态

Nginx反向代理+负载均衡+健康探测+缓存

显示后方的172.16.10.100即Server1不能正常连接

这样就实现了负载均衡和健康探测,但依然不能满足高并发量,再次用ab进行测试:

[root@server1 nginx-1.0.11]# ab -c 100 -n 10000 http://172.16.10.100/test.jpg

Nginx反向代理+负载均衡+健康探测+缓存

[root@server1 nginx-1.0.11]# ab -c 100 -n 10000 http://202.196.10.123/test.jpg

Nginx反向代理+负载均衡+健康探测+缓存

通过nginx代理可以满足的最大连接请求依然没有直接访问大

[root@server1 nginx-1.0.11]#vim /etc/nginx/nginx.conf 修改nginx的配置文件

Nginx反向代理+负载均衡+健康探测+缓存

proxy_cache_path /////设置缓存的路径和其他参数。缓存数据是保存在文件中的,缓存的键和文件名都是在代理URL上执行MD5的结果。 levels参数定义了缓存的层次结构。

proxy_set_header /////允许重新定义或者添加发往后端服务器的请求头。

proxy_cache /////指定用于页面缓存的共享内存。

proxy_cache_valid /////为不同的响应状态码设置不同的缓存时间。

proxy_cache_use_stale /////指定后端服务器出现状况时,nginx可以使用的过期缓存

将nginx重启

Nginx反向代理+负载均衡+健康探测+缓存

再次进行压力测试

[root@server1 nginx-1.0.11]# ab -c 100 -n 10000 http://202.196.10.123/test.jpg

Nginx反向代理+负载均衡+健康探测+缓存

可以看到最大连接请求已经达到了5000多,这样负载均衡+健康探测+缓存已经完成

接下来一个问题就是在启用缓存之后的访问问题,试着重新访问一下该站点

Nginx反向代理+负载均衡+健康探测+缓存

可以看到再怎么刷新页面内容依然是“I am server-1”,这就证明现在访问到的是nginx缓存在本地的结果,看看缓存目录中有没有内容

Nginx反向代理+负载均衡+健康探测+缓存

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2013-09/89774p2.htm

 

 

 

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索