首发于编程之路
分布式学习(3) ---- 初识Nginx

分布式学习(3) ---- 初识Nginx

Nginx两大作用:1.轻量web容器 2.反向代理服务器。

在Java领域中,Nginx更多的被用作在前端提供负载均衡的反向代理服务。

所以本文仅简要介绍下反向代理概念和负载均衡的实现。

.


反向代理

是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

随便画了个流程图如下:


安装Nginx

网上教程一大堆,略过了......

.


常用命令

nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。

nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。

nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。

nginx -s reopen 重新打开日志文件。

nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。

nginx -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

nginx -v 显示 nginx 的版本。

nginx -V 显示 nginx 的版本,编译器版本和配置参数。

.


Demo配置

先以一个小Demo来了解一下它是怎么实现负载均衡吧。

如上面那个流程图所示,我们想要通过访问Nginx,经过负载均衡,访问到不同Tomcat下的某项目(如个人博客)。

配置文件如下:

http {
    #设定mime类型,类型由mime.type文件定义
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    access_log    /var/log/nginx/access.log;

    #设定负载均衡的服务器列表
    upstream load_balance_server {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 127.0.0.1        weight=2;
        server 127.0.0.1:8081   weight=1;
    }

   #HTTP服务器
   server {
        #监听80端口
        listen       8090;
        
        #以什么IP进行访问
        server_name  localhost;

        #对所有请求进行负载均衡请求
        location /blog {
            #请求转向load_balance_server 定义的服务器列表
            proxy_pass  http://load_balance_server ;
        }
    }
}

配置文件中,我们通过定义了一个upstream来说明负载均衡策略(详情见下文),然后在location中对应。

配置完后执行nginx -s reload命令来重启Nginx.

因为我们的Nginx的端口是8090,,所以我们访问kkys.online:8090/blog时,nginx通过负载均衡,会按权重跳到我们在upstream中设置的地址。

如下图所示:

说明测试通过,但因博客中的图片不是全局路径,所以会显示不出来。通过原网址kkys.online/blog访问没有问题。

.

Nginx负载均衡调度的方法

即上面配置中的upstream可选的四种负载均衡算法


  • 服务器轮询(默认方式):每个请求访问按照时间顺序逐一分配到不同的服务器端,如果后端某台服务器宕机时,故障系统会被自动的剔除,使用户访问不受影响。Weight(权重)指定轮询的权值,Weight值越大,分配到的访问几率越高,主要用于服务器端性能不均的情况下。
  • ip_hash:每个请求按照访问的IP的Hash值进行分配,这行来自同一个IP的用户将会固定到后端的一个服务器,固定服务器后可以有效的解决网页存在的session共享的问题。
  • fair:该算法可以根据页面大小和加载时间长短智能的进行决策负载均衡,即根据后端服务器的响应时间来分配请求,响应时间段的优先分配。Nginx本身未集成fair模块,如果需要该调度算法,必须下载Nginx的upstream_fair模块,然后在config中配置加载。
  • url_hash:此调度算法是根据访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步的提高后端服务器的效率。Nginx本身未集成该模块,如果使用需安装Nginx的hash包,并编译加载到nginx。

.

Nginx的upstream模块支持的状态参数

在http的upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。通常设置的状态参数如下:

  • down:表示当前的server暂时不参与负载均衡。
  • backup:预留的备份服务器。当其他的所有非backup机器出现故障或者忙的时间,才会请求backup服务器,因此这台服务器的压力最轻。
  • max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

注:当负载均衡调度算法使用ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

参考:nginx中文文档

编辑于 2017-02-07

文章被以下专栏收录