nginx配置多个tomcat做均衡负载

nginx配置多个tomcat做均衡负载

所用到的工具及版本:
- ngnix1.12.2
- tomcat7
- jdk7
- redis


均衡负载的配置

1、准备两个tomcat修改其中一个tomcat的端口然后启动两个tomcat确保两个tomcat都能独立的运行,两个tomncat的端口分别为8080和8081,,如图:

nginx配置多个tomcat做均衡负载_第1张图片

两个tomcat都能运行,如图:
nginx配置多个tomcat做均衡负载_第2张图片

2、配置nginx。打开nginx安装目录下的conf/nginx.conf文件,最简单的配置就是加上两段代码
1

upstream zhzx {

        server 127.0.0.1:8080 weight=1;

        server 127.0.0.1:8081 weight=1;

    }

2

proxy_pass http://zhzx;

位置如图:
nginx配置多个tomcat做均衡负载_第3张图片

其中weight表示nginx分配访问2个tomcat的概率谁多谁少数值越大访问的概率越大。
3、以上配置后两个tomcat的集群就简单配置完成,现在访问80端口就可以达到分别访问两个tomcat 的效果,你会发现从80端口访问有时访问的是tomcat18080有时是tomcat8081说明集成成功。

配置session共享

虽然nginx配置了2两个tomcat但是你发现2个tomcat的session并不是共享的,session是存在各自的tomcat中,达不到实际需求。这时我们需要用redis来做这两个tomcat的session共享。
1、打开redis服务器。
2、在tomcat的lib文件夹中添加一下3个jar包:
nginx配置多个tomcat做均衡负载_第4张图片
3、在tomcat中conf/context.xml文件,添加一下代码:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
       host="localhost"
       port="6379"
       database="0"
       maxInactiveInterval="60" />

位置如图:
nginx配置多个tomcat做均衡负载_第5张图片

重启两个tomcat后再访问80端口就会发现不管访问的是其中的哪个tomcat。session都是一样的。

动静分离配置

由于tomcat擅长处理动态文件如jsp而不善于处理一些静态文件,此时我们可以将静态文件分离处理直接交由nginx处理,动态文件由nginx分配给tomcat处理。
将上面配置修改如下:

#location / {
            #root   html;
        #    index  index.html index.htm;


        #}

    #配置静态文件,交由nginx直接处理,im为nginx安装目录下创建存放静态文件的文件夹。
    location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js|ioc|eot|svg|ttf|woff)$ {
        root E:/nginx-1.12.2/im;
        expires 30d;
    }
    //其他请求交由tomcat处理
    location ~ .*$ {
    proxy_pass http://localhost; 

            # nginx非80端口处理 
            proxy_set_header        Host $host:$server_port; 
            # 获取真实IP 
            proxy_set_header        X-Real-IP $remote_addr; 
            # 获取代理者的真实ip 
            proxy_set_header       X-Forwarded-For   $proxy_add_x_forwarded_for; 
            # 解决getScheme,isSecure,sendRedirect
            proxy_set_header X-Forwarded-Scheme  $scheme; 
            #客户端连接的最大请求实体大小.一般默认设置够用,但是遇到上传大文件的时候nginx会直接关闭连接。由于业务上要上传1g的文件所以此处配置设置为1000m;
            client_max_body_size    1000m; 
            client_body_buffer_size 128k; 
            #proxy_connect_timeout   90; 
            #proxy_send_timeout      90; 
            #proxy_read_timeout      90; 
            proxy_buffer_size       4k; 
            proxy_buffers           4 32k; 
            proxy_busy_buffers_size 64k; 
            proxy_temp_file_write_size 64k;
            #设置代理连接超时,当一个tomcat挂掉后等待多长时间去连接另一tomcat,默认设置时间很长,所以此处设置为2秒
            #proxy_connect_timeout       2;
            #proxy_read_timeout          2;
            #proxy_send_timeout          2;
    }

注意

1、nginx的重新加载命令nginx -s reload有时不起效,最好用其他命令

2、location ~ .*$ {}像这样的配置大括号和左边的内容一定要有空格分隔,不然会nginx会报错。

3、如果配置动静分离后项目无法访问图片等静态内容,可以查看nginx的日志解决,一般是静态文件的路径配置不正确。

你可能感兴趣的:(web)