Nginx

前言

      Nginx是一个高性能的反向代理服务器,可以将流量均衡分配到后端服务器上。

安装和下载

      下载地址是http://nginx.org/en/download.html,因为是在windows平台上测试的,所以这里要下载nginx/Windows-1.14.2 的包,下载后解压,运行cmd,定位到Nginx的路径下,需要执行以下命令

cd C:\Users\czl\Desktop\nginx-1.14.2

   启动Nginx

start nginx

      关闭Nginx

nginx -s quit

      修改配置后,不用重启直接加载修改后的配置

nginx -s reload

  在启动后,浏览器输入localhost,如果成功会出现以下网页

负载均衡

      首先,我在本机上启动了两个Tomcat服务器,访问路径分别为localhost:8080,localhost:8081。

      接下来,需要修改Nginx的配置,在conf\nginx.conf,修改为以下内容

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
   
    upstream myproject {
          server   localhost:8080;
          server   localhost:8081;
        }

    server {
        listen       80;
        server_name  localhost;

        location / {
           proxy_pass http://myproject;
        }
    }
}

     启动Nginx后,在浏览器输入http://localhost/,不断刷新,会发现8080端口和8081端口返回的内容会依次循环出现,这是因为默认的负载均衡策略就是轮询。

健康检查

     上面的配置正常情况下会运行良好的,这个时候我把8081的Tomcat关掉,继续刷新地址会出现什么?

     第一次的时候能正常出现8080内容,第二次的时候应该会请求8081的,但是服务没了,所以会卡很久最终失败的。

     所以为了处理这种情况需要增加一个健康检查的机制,如下

       upstream myproject {
          server   localhost:8080  max_fails=1 fail_timeout=60s;
          server   localhost:8081  max_fails=1 fail_timeout=60s;
        }

    这里的配置表示在fail_timeout定义的时间段内失败次数达到max_fails次的话,就会在接下来的fail_timeout时间段内不再请求当前地址,也就是说在前60秒内失败了一次的话,就会在接下来的60秒到120秒之间不再请求8081的地址,120秒后可以继续请求8081。

    但是这种健康检查是不够完美的。因为这是被动检查的,如果前60秒内有大量请求过来,将全部失败了。而且接下来还可能继续重复这种情况。

    现在是有两种反向代理可以提供主动健康检查。

      1.用淘宝开源的tengine 官网是http://tengine.taobao.org/

      2.还有可以用Nginx plus,不过要收费的,官网是https://www.nginx.com/

小结

     最后还得说一下,如果只用单机部署nginx不能实现高可用的,还要配合Keepalived实现主备切换,不过复杂性高很多了。另外也有比较现成的方案,例如阿里云的负载均衡SLB,虽然要给钱就是了。

posted @ 2019-04-17 20:54  Caizl  阅读(190)  评论(0编辑  收藏  举报