1.案例实现Nginx反向代理; 2.反向代理的理论知识拓展.
一, 实验Nginx的反向代理功能
使用Nginx实现Web反向代理功能,实现如下功能:
- 后端Web服务器两台,可以使用httpd实现
- Nginx采用轮询的方式调用后端Web服务器
- 两台Web服务器的权重要求设置为不同的值
- 最大失败次数为1,失败超时时间为30秒
实验拓扑图:
1. 部署实施后端Web服务器
后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。
1.1 部署后端Web1服务器
web1] # yum -y install httpd
web1]# echo "192.168.2.100" > /var/www/html/index.html
web1]# systemctl restart httpd
web1]# firewall-cmd --set-default-zone=trusted
web1]# setenforce 0
1.2 部署后端Web2服务器
web2] # yum -y install httpd
web2]# echo "192.168.2.100" > /var/www/html/index.html
web2]# systemctl restart httpd
web2]# firewall-cmd --set-default-zone=trusted
web2]# setenforce 0
2. 配置Nginx服务器,添加服务器池,实现反向代理功能
proxy]# vim /usr/local/nginx/conf/nginx.conf
...
http{
...
upstream webserver { #使用upstream定义后端服务器集群,集群名称可以任意定义,如webserver
server 192.168.2.100:80; #使用server定义集群中的具体服务器和端口
server 192.168.2.200:80;
}
...
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webserver; #通过proxy_pass将用户的请求转发给webserver集群
}
}
proxy]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置
client]# curl http://192.168.4.5 #多次访问代理服务器测试轮询效果
... //多次访问代理服务器
3. 配置upstream服务器集群池属性
proxy]# vim /usr/local/nginx/conf/nginx.conf
...
http {
...
upstream webserver {
server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30;
server 192.168.2.101 down;
}
#weight设置服务器权重值,默认值为1
#max_fails设置最大失败次数
#fail_timeout设置失败超时时间,单位为秒
#down标记服务器已关机,不参与集群调度
...
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webserver; #调用集群
}
}
proxy]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置
web1]# systemctl stop httpd //关闭一台后端服务器,如web1
client]# curl http://192.168.4.5 //多次访问代理服务器测试轮询效果
... //多次访问代理服务器
web1]# systemctl start httpd //再次启动后端服务器web1的httpd
client]# curl http://192.168.4.5 //多次访问代理服务器测试轮询效果
... //多次访问代理服务器
4. 配置upstream服务器集群的调度算法
4.1 设置相同客户端访问相同Web服务器
proxy ]# vim /usr/local/nginx/conf/nginx.conf
...
http {
...
upstream webserver {
ip_hash; #通过ip_hash设置调度规则为:相同客户端访问相同服务器
server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
...
server {
listen 80;
server_name www.tarena.com;
location / {
proxy_pass http://webserver;
}
}
proxy]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置
client]# curl http://192.168.4.5 #多次访问代理服务器测试轮询效果
... //多次访问代理服务器
二, Nginx反向代理的知识拓展
Nginx与Apache一样, 是一款轻量级的web服务器软件,由俄罗斯人研发,它支持数以万计的高并发访问,并且稳定,开源,跨平台.
是一款高性能的http服务器和反向代理服务器,实现负载均衡是其作为反向代理服务器的重用功能之一.
例如,国内的jd网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时一个名词应运而生:分布式部署, 也就是通过部署多台服务器来解决访问人数限制的问题;
通过上述图解可知,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时请求的来源明确的,但是请求具体由哪台服务器处理就不明确了,Nginx扮演的就是一个反向代理角色。客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的主要作用:
(1)保证内网的安全.我们通常将反向代理作为公网访问地址,Web服务器位于内网
(2)负载均衡,通过反向代理服务器来优化网站的负载量
负载量:客户端向代理服务器发送的请求数量,而请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。
所以,将代理服务器接收到的请求,按照规则分发的过程,称为负载均衡;常用的调度算法有weight(轮询),ip_hash等.
负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。
结束.