1、安装 nginx 和 tomcat
我 这 里 是 使 用 docker 安 装 的 。 安 装 流 程 可 参 照
http://www.cnblogs.com/andyfengzp/p/6424150.html
这里安装了两个 tomcat,端口分别是 42000 和 42001。第二个 tomcat 的首页随便加了些代
码区分
2、nginx 配置
#这里的域名要和下面 proxy_pass 的一样
```upstream fengzp.com {
server 192.168.99.100:42000 weight=1;
server 192.168.99.100:42001 weight=2;
}
server {
listen 80;
server_name 192.168.99.100;
location / {
proxy_pass http://fengzp.com;
proxy_redirect default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
```
3、测试
刷新页面发现页面会发生变化,证明负载配置成功。因为我配的权重第二个是第一个的两倍,
所以第二个出现的概率会是第一个的两倍。4、后续问题
如果关了 tomcat1,再多次刷新页面,接下来出现的就会都是 tomcat2 的页面,但是时而快
时而慢。这其中原因是当如果 nginx 将请求转发到 tomcat2 时,服务器会马上跳转成功,但
是如果是转到 tomcat1,因为 tomcat1 已经关闭了,所以会出现一段等待响应过程的过程,
要等它失败后才会转到 tomcat2。
而这个等待响应的时间我们是可以配置的。
这个时间由以下 3 个参数控制:
proxy_connect_timeout:与服务器连接的超时时间,默认 60s
fail_timeout:当该时间内服务器没响应,则认为服务器失效,默认 10s
max_fails:允许连接失败次数,默认为 1
等待时间 = proxy_connect_timeout + fail_timeout * max_fails
如果我这样配置的话,只需等待 6 秒就可以了。
5、负载均衡策略
1、轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动
剔除。
upstream fengzp.com {
server 192.168.99.100:42000;
server 192.168.99.100:42001;
}
1
2
3
4
2、最少连接
把请求分配到连接数最少的 server
upstream fengzp.com {
least_conn;
server 192.168.99.100:42000;
server 192.168.99.100:42001;
}
1
2
3
45
3、权重
使用 weight 来指定 server 访问比率,weight 默认是 1。以下配置会是 server2 访问的比例是
server1 的两倍。
upstream fengzp.com {
server 192.168.99.100:42000 weight=1;
server 192.168.99.100:42001 weight=2;
}
4、ip_hash
每个请求会按照访问 ip 的 hash 值分配,这样同一客户端连续的 Web 请求都会被分发到同一
server 进行处理,可以解决 session 的问题。如果 server 挂掉,能自动剔除。
upstream fengzp.com {
ip_hash;
server 192.168.99.100:42000;
server 192.168.99.100:42001;
}
ip_hash 可以和 weight 结合使用。