• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Nginx负载均衡以及动静分离的原理与配置

    一、Nginx实现负载均衡原理

    Nginx实现负载均衡是通过反向代理实现


    Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。

    但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。

    Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权重来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略

    Nginx服务器

    1、首页使用精准匹配

    2、静态页面使用正则匹配自己处理

    3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器

    二、Nginx动静分离原理

    服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由 Nginx 提供服务,动态资源由 Nginx 转发至后端。

    Nginx 静态处理优势

    三、Nginx + Tomcat 动静分离、负载均衡配置步骤

    环境准备:

    Nginx 服务器:192.168.121.13

    Tomcat 服务器1:192.168.121.12:8080 192.168.121.12:8081

    Tomcat 服务器2:192.168.121.10

    1、部署 Nginx 负载均衡服务器

    首先将 nginx-1.12.0.tar.gz 压缩包上传到 /opt 目录下
    
    systemctl stop firewalld.service 
    systemctl disable firewalld.service 
    setenforce 0
    
    yum install -y pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
    
    useradd -M -s /sbin/nologin nginx
    cd /opt
    tar zxvf nginx-1.12.0.tar.gz -C /opt/
    
    cd nginx-1.12.0/
    ./configure \
    
    --prefix=/usr/local/nginx \
    
    --user=nginx \
    
    --group=nginx \
    
    --with-file-aio \
    
    --with-http_stub_status_module \
    
    --with-http_gzip_static_module \
    
    --with-http_flv_module \
    
    --with-http_ssl_module
    
    make && make install
    
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    
    vim /lib/systemd/system/nginx.service
    [Unit]
    Description=nginx
    After=network.target
    [Service]
    Type=forking
    PIDFile =/usr/local/nginx/logs/nginx.pid
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    
    chmod 754 /lib/systemd/system/nginx.service
    systemctl start nginx.service
    systemctl enable nginx.service
    

    2、部署两台 Tomcat 应用服务器

    所需安装包为:
    apache-tomcat-9.0.16.tar.gz  
    jdk-8u201-linux-x64.rpm 
    #scp apache-tomcat-9.0.16.tar.gz root@192.168.121.10:/opt    #将所需的压缩包在Tomcat1上传给Tomcat2 server,当然我们也可以自己直接将压缩包拉到/opt目录下
    
    
    systemctl stop firewalld.service 
    systemctl disable firewalld.service 
    setenforce 0
    
    rpm -qpl jdk-8u201-linux-x64.rpm
    rpm -ivh jdk-8u201-linux-x64.rpm 
    java -version
    
    vim /etc/profile.d/java.sh
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    export PATH=$JAVA_HOME/bin:$PATH
    
    source /etc/profile.d/java.sh
    java -version
    
    cd /opt
    vim abc.java
    public class abc {
      public static void main(String[] args){
        System.out.println("Hello World!")
      }
    }
    
    [root@localhost?opt]#javac abc.java      #用来检测JDK环境是否设置成功
    [root@localhost?opt]#java abc
    Hello World!
    
    cd /opt
    tar zxvf apache-tomcat-9.0.16.tar.gz
    mv apache-tomcat-9.0.16 /usr/local/tomcat
    
    ##启动tomcat##
    /usr/local/tomcat/bin/startup.sh
    netstat -natp | grep  8080
    


    动静分离配置

    (1)Tomcat1 server 配置
    mkdir /usr/local/tomcat/webapps/test
    vim /usr/local/tomcat/webapps/test/index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>JSP test1 page</title>   #指定为 test1 页面
    </head>
    <body>
    <% out.println("动态页面 1,http://www.test1.com");%>
    </body>
    </html>
    
    
    vim /usr/local/tomcat/conf/server.xml
    #由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
     <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
     </Context>
    </Host>
    
    /usr/local/tomcat/bin/shutdown.sh 
    /usr/local/tomcat/bin/startup.sh 
    
    (2)Tomcat2 server 配置
    mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
    
    vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>JSP test2 page</title>   #指定为 test2 页面
    </head>
    <body>
    <% out.println("动态页面 2,http://www.test2.com");%>
    </body>
    </html>
    
    
    vim /usr/local/tomcat/tomcat1/conf/server.xml
    #删除前面的 HOST 配置
    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
     <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
    </Host>
    
    /usr/local/tomcat/tomcat1/bin/shutdown.sh 
    /usr/local/tomcat/tomcat1/bin/startup.sh 
    
    
    vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    <head>
    <title>JSP test3 page</title>   #指定为 test3 页面
    </head>
    <body>
    <% out.println("动态页面 3,http://www.test3.com");%>
    </body>
    </html>
    
    
    vim /usr/local/tomcat/tomcat2/conf/server.xml
    #删除前面的 HOST 配置
    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
     <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
    </Host>
    
    /usr/local/tomcat/tomcat2/bin/shutdown.sh 
    /usr/local/tomcat/tomcat2/
    

    Nginx 负载均衡模式

    rr 负载均衡模式:

    每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。

    least_conn 最少连接:

    优先将客户端请求调度到当前连接最少的服务器。

    ip_hash 负载均衡模式:

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash。

    fair(第三方)负载均衡模式:

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    url_hash(第三方)负载均衡模式:

    和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到一个同 一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。

    总结

    到此这篇关于Nginx负载均衡以及动静分离的原理与配置的文章就介绍到这了,更多相关Nginx负载均衡及动静分离内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:解析Tomcat架构原理到架构设计
    下一篇:浅谈实时计算框架Flink集群搭建与运行机制
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Nginx负载均衡以及动静分离的原理与配置 Nginx,负载,均衡,以及,动静,