小言_互联网的博客

Nginx 配置负载均衡

243人阅读  评论(0)

 

架构思想

环境

配置 nginx 配置

ip_hash技术


 

架构思想

 

环境

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技术


  
  1. upstream www.erp.com {
  2.     server 192.168 .15 .131: 8080;
  3.     server 192.168 .15 .131: 8090;
  4.     server 192.168 .15 .131: 8100;
  5.    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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场