这一篇文章是转载于 https://www.cnblogs.com/andyfengzp/p/6434125.html 目的是方便查阅
1, 安装 nginx 和 tomcat
这里安装了两个 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,
- upstream fengzp.com {
- server 192.168.99.100:42000;
- server 192.168.99.100:42001;
- }
2, 最少连接
把请求分配到连接数最少的 server
- upstream fengzp.com {
- least_conn;
- server 192.168.99.100:42000;
- server 192.168.99.100:42001;
- }
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 的问题.
- upstream fengzp.com {
- ip_hash;
- server 192.168.99.100:42000;
- server 192.168.99.100:42001;
- }
ip_hash 可以和 weight 结合使用.
来源: http://www.bubuko.com/infodetail-2970074.html