运维java技术

Nginx代理多台tomcat服务

2019-01-30  本文已影响37人  07b287742148

需求:
客户端发起访问请求,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
上一篇 下一篇

猜你喜欢

热点阅读