Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

5,465

Nginx:反向代理(负载均衡)

  • 2013-05-18
  • 暂无评论

Nginx通过反向代理功能实现负载均衡

Nginx做为负载均衡很大的优势,并发优势就不用说了,支持的负载均衡的功能比较强大
upstream(上游)通过 upstream 可以设定后端服务器,指定的方式可以是 IP 地址与端口、域名、UNIX 套接字(socket)。

upstream name{
	server xxxxxxx;#xxxxxx可以是IP地址与端口、域名、UNIX套接字(socket)
}
server{
	proxy_pass http://name;#该name就是设定好的均衡负载配置
	#代理设置
	proxy_set_header Host $host;
       	proxy_set_header X-Forwarded-For $remote_addr;#保留用户IP信息

	#location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

	local / {
		proxy_pass http://name2;#该name就是设定好的均衡负载配置
		#代理设置
		proxy_set_header Host $host;
       		proxy_set_header X-Forwarded-For $remote_addr;#保留用户IP信息
	}
	#因为是放置在server配置中,可以进行url的重定向或其他代理设置,相当灵活
}

 

代理缓存

当网站内的图片及JS用cache服务器的时候,就需要在此处进行代理设置

  1. 因为Nginx的并发能力高于大多数的cache服务器,由Nginx在前端做负载均衡
  2. 将图片及JS请求转发到cache服务器,再由cache服务器去请求真实的web服务器(也是Nginx服务器)
  3. 注意,不要照成环路访问,真实web服务器和负载均衡服务器都是用Nginx,需要分为2个服务

有5种均衡负载的方式

1.轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2.权重(weight):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream name{ 
	server 192.168.0.14 weight=10; 
	server 192.168.0.15 weight=10; 
}

 

3.用户IP哈希(client IP):每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream name{
   	ip_hash;
   	server 192.168.0.1;
   	server 192.168.0.2;
	#和 ip_hash 配合使用的关键字:down。当某个一个 server 暂时性的宕机(down)时,你可以使用“down”来标示出来,并且这样被标示的 server 就不会接受请求去处理。
	server 192.168.0.3 down;
	#当然,如果所 hash 到的服务当前不可用,则请求会被转移到其他服务。
}

 

#注意的是 weightip_hash 是不能同时使用的,原因很简单,他们是不同且彼此冲突的策略

4.相应时间(fair):按后端服务器的响应时间来分配请求,响应时间短的优先分配。需要安装Upstream Fair Balancer Module

upstream test{
   	server 192.168.0.1;
   	server 192.168.0.2;
   	fair;
}

 

5.自定义hash(hash):这种模式可以根据给定的字符串进行Hash分配,和ip_hash概念一致。需要安装Upstream Hash Module

upstream test{
	server 192.168.0.1;
	server 192.168.0.2;
	#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
	hash $request_uri;
	#hash算法
	hash_method crc32;
}

 

以上方式还支持与另外2种策略组合

1.重试策略:可以为每个 backend 指定最大的重试次数,和重试时间间隔。所使用的关键字是 max_fails fail_timeout

upstream backend {
	server backend1.example.com weight=5;
	server 54.244.56.3:8081 max_fails=3 fail_timeout=30s;
	#失败的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定
	#可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 响应时间。
}

 

#有一种情况需要注意,就是 upstream 中只有一个 server 时,max_failsfail_timeout 参数可能不会起作用。导致的问题就是 nginx 只会尝试一次 upstream 请求,如果失败这个请求就被抛弃了 : ( ……解决的方法,比较取巧,就是在 upstream 中将唯一 server 多写几次
2.备机策略(Nginx0.6.7以后):使用“backup”关键字。当所有的非备机non-backup都宕机down或者繁忙busy的时候,就只使用由 backup 标注的备机。
必须要注意的是,backup 不能和 ip_hash 关键字一起使用。

upstream backend {
    	server backend1.example.com;
    	server backend2.example.com backup;
    	server backend3.example.com;
}

 



评论已关闭!

back up ↑

无觅相关文章插件,快速提升流量