架构思想
环境
nginx 服务一台
有三个 web 服务分别是 service01, service02, service03 ,启动,并且可以正常访问.
配置 nginx 配置
www.erp.com 这个为域名,可以配置为 ip 地址.
#配置负载均衡 upstream www.erp.com{ server 192.168.72.145:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.72.145:8090 weight=2 max_fails=2 fail_timeout=30s; server 192.168.72.145:8100 weight=3 max_fails=2 fail_timeout=30s; ip_hash; # 一种IP的算法,只要用户使用同一个IP请求,nginx会分流到之前请求的服务器, 如果这行去掉的话,就是采用轮询,会有 session 问题 }
#gzip on; server { listen 80; server_name www.erp.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / { # root html; # index index.html index.htm; proxy_pass http://www.erp.com/; } |
ip_hash技术
-
upstream www.erp.com {
-
server
192.168
.15
.131:
8080;
-
server
192.168
.15
.131:
8090;
-
server
192.168
.15
.131:
8100;
-
ip_hash;#一种IP的算法,只要用户使用同一个IP请求,nginx会分流到之前请求的服务器
-
}
nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端应用服务器,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:
说明:因为这种方式只能用IP来分配后端,所以要求nginx一定要是最前端的服务器,否则nginx会取不到真实的客户端ip,那ip_hash就失效了。例如在服务器架构中使用squid做前端高速缓存,那么nginx取到的就是squid服务器的ip,用这个ip来做ip_hash肯定是不对的。再有,如果nginx的后端还有其他的负载均衡,将请求又分流了,那么对于某个客户端的请求,肯定不能定位到同一台应用服务器(例如php的fast-cgi服务器等),这样也不能做到session共享,如果在nginx后面再做负载均衡,我们可以再搭一台squid,然后再直接到应用服务器,或者用 location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端。
转载:https://blog.csdn.net/zhanglong_4444/article/details/104275707