今天又是头大的一天,使用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;
}
}