今天又是头大的一天,使用Nginx配置负载均衡。

//两种代理方式,一种使用proxy_pass,一种使用upstream
//但是后面的方式,直接访问主机服务可以,访问外网服务就不行,只能再配置proxy_set_header Host 不清楚为什么
upstream httpList{
	server 192.168.248.128:8088;
    //后面还可以添加一些参数
    //weight越大访问次数越多
    //down 关闭该服务
    //backup 备胎
	server www.atguigu.com:80;
    //按理来说不配置默认轮询的方式,但有时候就是刷不出来另一个,不知道是有缓存还是为啥
}
server {
    listen 80; 
    server_name localhost; 

    location / {
#	proxy_pass http:/ /www.qq.com;
//这里需要用www,不然会进行一次重定向。也就是url会改变。
//而且不支持https
	proxy_pass http://httpList;
	proxy_redirect     off;
	proxy_set_header   Host   www.atguigu.com;
    //$host 和 $http_host 是指向你自己的机器的。要代理到其他网站, HTTP Header 里的 Host 就要设置成目标站点的域名,这样请求发到目标站点,目标站点的 Web 服务器才能正确处理请求。
#      root /my_blog/crm/; 
#      index index.html;  
    }
}
  • 开始我在主机host文件里配置了域名后,去虚拟机访问结果跳转到了莫名其妙的无法访问地址, 后来才明白没有在虚拟机中配置,所以在主机也能通过设置的域名访问Nginx
192.168.248.128 caohaotian.cn
负载均衡策略
  • 使用轮询会有一次访问session存在一个服务器上,下次访问轮到另一个服务器上该session就无法使用
  • ip_hash:通过来源ip判断,但现如今不适用,用户移动切换基站ip变化
  • least_hash 访问次数少优先访问,不适用,少有少的原因可能性能不行
  • fair 根据后端服务响应时间转发
  • url_hash 定向流量转发,根据url的hash值,相同转发相同服务器,不能维持会话,但可以访问固定资源
动静分离配置
server {
    listen 8360; 			
    server_name localhost; 
//动态资源放在tomcat中
    location / {
    //tomcat的webapp下的crm项目
	proxy_pass http://192.168.248.128:8088/crm/;
    }
//静态资源放在Nginx中。
 location /image{
     root /var/www/html;
#     index index.html;  
    }
}