Nignx反向代理与负载均衡

1、正向代理与反向代理理解

1.1、正向代理

正向代理是代理客户端去请求到服务器
比如我们想访问某个海外站点,但是被墙了无法直接访问,这个时候我们就会采用vpn代理了,它会帮我们去请求该海外站点,然后再将网页资源返回我们。
在这里插入图片描述

1.2、反向代理

反向代理是代理服务器接受客户端的请求
比如我们在机房部署了一套系统(多台机),为了稳定性和安全性,我们通常会使用nginx或F5产品,它会帮我们接收客户端的请求,然后均匀负载分发到不同的后端机器,处理完后再将结果响应给客户端。这样既可以减轻服务端的压力,也不用直接暴露服务器给外部。
在这里插入图片描述

2、反向代理配置

反向代理需要注意两个关键配置,upstreamproxy_pass,upstream 用来指定需要真实访问的地址,my_server是自定义命名。proxy_pass 配置为 http://my_server,意思会把客户访问www.mytest123.com的请求,转给upstream my_server{}处理。简单理解,其实就是nginx中的server代理了地址为192.168.66.77:8080的服务。当然,upstreamproxy_pass都可以配置多个。

http {
	
	upstream my_server{ 
		server 192.168.66.77:8080; 
	}

	# 服务一
	server {
    	    listen       8085;
       		server_name  www.mytest123.com;

			location / {  
				proxy_pass http://my_server; 
				index index.html index.htm; 
				}
        	.....
    	}
    
}    

3、负载均衡配置

3.1、概念理解

负载指服务器承担的客户端请求压力,均衡指将这些压力均匀的分摊到各个服务上面。那么合在一起,负载均衡( Load Balance)就是指将客户端的请求压力均匀的分摊到多个服务上进行执行,从而增加吞吐量,提高网络的灵活性和可用性。
nginx常见负载均衡策略有3种:轮询指定权重ip_hash

3.2、轮询方式(默认)

负载均衡通过upstream来配置,需要将请求分发到几台机器,就在upstream中指定几个server。下面示例指定的两台采用默认轮询策略,即每个请求按时间顺序逐一分配到不同的后端服务器,比如第一个请求77处理,那第二个就会让78处理,第三个77…这样顺序轮询。如果某一台服务器 down 掉了,则会自动被剔除。

http {
	
	upstream my_server{ 
		server 192.168.66.77:8080; 
		server 192.168.66.78:8080; 
	}

	# 服务一
	server {
    	    listen       8085;
       		server_name  www.mytest123.com;

			location / {  
				proxy_pass http://my_server; 
				index index.html index.htm; 
				}
        	.....
    	}
    
}    

3.3、指定权重

比如我们希望性能好的机器能够多处理请求,那么可以通过weight指定轮询权重,weight 值大的被轮询的几率更高,承担的请求任务更多,如下配置77轮询的几率会比78的高。

http {
	
	upstream my_server{ 
		server 192.168.66.77:8080 weight=5; 
		server 192.168.66.78:8080 weight=2; 
	}

	# 服务一
	server {
    	    listen       8085;
       		server_name  www.mytest123.com;

			location / {  
				proxy_pass http://my_server; 
				index index.html index.htm; 
				}
        	.....
    	}
    
}    

3.4、ip_hash方式

ip_hash通常用来解决session一致性问题
我们假设一个常见的场景,比如有一个用户第一次访问登录时是通过77服务来处理,如果不加ip_hash配置,则会采用默认轮询方式,那么该用户第二次访问站点时很可能会由78服务处理,但是77和78两个服务之间session并没有共享机制,那么这个用户的登录状态就会丢失,这显然不符合我们实际需求。
所以,这个时候就需要ip_hash出马了,它会根据每个请求ip的hash结果进行分配处理,让每个访客固定访问一个后端服务器,这样就能解决session的问题。当然,关于session共享问题还有很多其它方案,比如sso、redis等等,我们这里讲的是nginx本身支持的session一致性问题解决方案。

http {
	
	upstream my_server{ 
		ip_hash;
		server 192.168.66.77:8080; 
		server 192.168.66.78:8080; 
	}

	# 服务一
	server {
    	    listen       8085;
       		server_name  www.mytest123.com;

			location / {  
				proxy_pass http://my_server; 
				index index.html index.htm; 
				}
        	.....
    	}
    
}    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值