美文网首页运维java技术
Nginx代理多台tomcat服务

Nginx代理多台tomcat服务

作者: 07b287742148 | 来源:发表于2019-01-30 15:37 被阅读37次

    需求:
    客户端发起访问请求,Nginx代理服务器轮询访问后台接口,减少单个tomcat请求压力

    iptables设置

    # 停止firewall
    systemctl stop firewall.service
    
    # 禁止firewall
    systemctl disable firewall.service
    
    # 安装iptables
    yum install iptables-services -y
    
    
    # 编辑防火墙文件,一般只开放nginx和mysql端口,
    # 自测为了方便,还开放两个tomcat的端口,8080和8090
    
    vim /etc/sysconfig/iptables
    
    -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 
    -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT 
    -A INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT 
    -A INPUT -m state –state NEW -m tcp -p tcp –dport 8090 -j ACCEPT 
    
    # 启动iptables
    systemctl start iptables.service
    

    一台linux设置两个tomcat

    1. 配置tomcat前需安装好jdk
      ,这里两个tomcat的地址如下:
    /usr/local/tomcat1
    /usr/local/tomcat2
    
    1. 分别配置两个tomcat的catalina.sh
    vim /usr/local/tomcat1/bin/catalina.sh
    # tomcat启动会从该文件读取CATALINA_HOME的地址,不同tomcat分别配置自己的地址即可
    export CATALINA_HOME=/usr/local/tomcat1
    export CATALINA_BASE=/usr/local/tomcat1
    
    export CATALINA_HOME=/usr/local/tomcat2
    export CATALINA_BASE=/usr/local/tomcat2
    
    1. 配置tomcat2的端口,修改默认的三个端口即可
    <Server port="18005" shutdown="SHUTDOWN">
    
    <Connector port="8090" protocol="HTTP/1.1"
    
    <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
    
    1. 分别启动两个tomcat,可以看到当前控制台打印的CATALINA_BASE路径即自己配置的路径
    [root@bigdata1-test webapps]# sh ../bin/startup.sh 
    Using CATALINA_BASE:   /usr/local/tomcat1
    Using CATALINA_HOME:   /usr/local/tomcat1
    Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
    Using JRE_HOME:        /usr/local/jdk1.8.0_201
    Using CLASSPATH:       /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
    Tomcat started.
    
    [root@bigdata1-test webapps]# ../bin/startup.sh 
    Using CATALINA_BASE:   /usr/local/tomcat2
    Using CATALINA_HOME:   /usr/local/tomcat2
    Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
    Using JRE_HOME:        /usr/local/jdk1.8.0_201
    Using CLASSPATH:       /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
    Tomcat started.
    
    1. 此时分别访问8080和8090端口即可,注意前面iptables要开放8080和8090端口。

    Nginx安装与配置

    1. 安装c++编译环境
    yum install gcc-c++ -y
    
    # 查看是否安装
    rmp -qa | grep gcc*
    
    1. 安装依赖库
    # 在线安装
    yum install pcre* 
    
    yum install openssl*
    
    yum install zlib*
    
    # 离线安装
    # 下载各个依赖包,分别执行 ./configue, make, make install
    http://www.pcre.org/
    http://www.openssl.org/
    http://www.zlib.net/
    
    1. 安装Nginx
    # 下载地址:http://nginx.org/en/download/html
    
    # 解压安装,分别执行 
    ./configure, make, make install
    # 安装完成后Nginx默认在:
    /usr/local/nginx
    
    # 记得开放Nginx默认端口80
    
    # 启动 Nginx
    /usr/local/nginx/sbin/nginx
    
    # 访问 Nginx
    http://Nginx服务器ip
    
    
    1. Nginx常用命令
    # 启动
    nginx/sbin/nginx
    
    # 停止
    nginx/sbin/nginx -s stop
    
    # 重启
    nginx/sbin/nginx -s reload
    
    # 检验nginx.conf是否合法, 每次修改配置文件后都要检验
    nginx/sbin/nginx -t
    

    Nginx配置轮询调用两个tomcat的接口

    1. 这里模拟前后端分离情况下,通过Nginx代理轮询调用两个tomcat服务
    2. 后端两台tomcat发布相同的服务,测试接口返回一个hello world字符串
    #
        # url:localhost:8080/demoService/index  
        #      localhost:8090/demoService/index 
        # 后端代码
        @RequestMapping("/index")
        public String index(){
            logger.info("调用tomcat服务!");
            return "hello world";
        }
    
    1. 前端代码就一个ajax请求调用index接口,并打印返回结果

      一个index.html,一个jquery依赖文件

        $.ajax({
            type:"GET",//请求类型
            url:"demoService/index",//请求的url                
            dataType:"text",//ajax接口(请求url)返回的数据类型
            success:function(data){//data:返回数据(json对象)
                    alert(data);
        
        }
    
    1. 后端代码发布后启动两个tomcat,并能通过url返回结果

      前端代码放到Nginx服务器指定地址 /data/front/

    1. 配置 nginx.conf, 添加以下配置即可
    #
        upstream my_server
        {
            # 轮询访问两个端口服务
            server 127.0.0.1:8090;
            server 127.0.0.1:8080;
        }
    
        server {
            listen       80;
            server_name  demo.mynginx.com;
            # 前端代码地址
            root /data/front/;
            # 初始页面
            index index.html;
    
            # 请求代理
            location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-Ip $remote_addr;
                # 反向代理地址,此处要和上面的upstream一致
                proxy_pass http://my_server;
            }
    
            # 请求代理,对于指定格式的文件进行缓存
            location ~ .*\.(gif|jpg|png|html|mp3){
                    expires 6h;
            }
    
            location ~ .*\.(js|css)?$ {
                    expires 2h;
            }
            
            # 日志存放地址
            access_log /data/logs/nginx/app_access.log;
    
            
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
    1. 检测,重启 nginx,
        sbin/nginx -t
        sbin/nginx -s reload
        # 日志存放地址要先建好,否则检测会失败
    
    1. 客户端配置host

      demo.mynginx.com 服务器ip

    1. 访问服务

      http://demo.mynginx.com/index.html

      监听tomcat日志可以见到,两台是轮询进行访问

    2. 更多

       在配置upstream时可以有多个配置模式
       
        热备模式:
            server 127.0.0.1:8090;
            server 127.0.0.1:8080 backup;
            # 8090没挂请求一直走8090,挂了走8080
            
        权重:
            server 127.0.0.1:8090;
            server 127.0.0.1:8080 weight=2;
            # 假设3个请求,8080会得到2个
            
        # 上面几个方式不能解决session问题,多个tomcat不共享session,
        # 如果请求发到不同tomcat可能会造成重新登录情况
        
        ip地址hash
            ip_hash;
            server 127.0.0.1:8090;
            server 127.0.0.1:8080;
            # ip经过hash,同一个ip请求会分到同一个tomcat,不要考虑session
            # 最好还是用token代替session
    

    相关文章

      网友评论

        本文标题:Nginx代理多台tomcat服务

        本文链接:https://www.haomeiwen.com/subject/hxrcsqtx.html