Nginx 实现 Tomcat 集群

使用 Nginx 实现 Tomcat 集群。

1 准备工作


  • Tomcat 版本:apache-tomcat-8.0.53-windows-x64

  • 下载地址:http://tomcat.apache.org/download-70.cgi

  • tomcat1(http-8080,webapp/test)

  • tomcat2(http-8081,webapp/test)

  • tomcat3(http-8082,webapp/test。包含静态资源 test/static/…,关于文件的上传和下载的请求会全部转发到这里,可以理解为一个文件服务器)

  • 安装并分别启动成功。

2 配置 Nginx

2.1 配置 nginx.conf

编辑 Nginx 根目录下的 conf/nginx.conf 文件,配置如下(具体的参数配置说明和优化见下文):

worker_processes  1;

events {
    multi_accept on;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  120;

    upstream tomcat_test {
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8081 weight=1;
    }

    upstream tomcat_test_static {
        server 127.0.0.1:8082 weight=1;
    }

    server {
        listen       80;
        server_name  localhost;

	    location ~*/test/static/ {
            proxy_pass http://tomcat_test_static;
        }

        location / {
	        proxy_pass http://tomcat_test;
	        proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
        }
    }
}

2.2 静态资源

# 静态资源服务器 location,正则匹配,~为区分大小写,~*为不区分大小写
location ~*/test/static/ {
    # 方法1
proxy_pass http://tomcat_test_static;
# 方法2:指定相对路径,相对 nginx 安装目录下的 mydata 为根目录
    # 如 http://127.0.0.1/test/static/common/images/1.png 会映射到 nginx 安装目录 /mydata/test/static/common/images/1.png
    # root mydata;
    # 方法3:指定绝对路径,注意 windows 系统下分隔符用 /
    # 如 http://127.0.0.1/test/static/common/images/1.png 会映射到 D:/apache-tomcat-8.0.53-8082/webapps/test/static/common/images/1.png
    # root D:/apache-tomcat-8.0.53-8082/webapps;

    # 开启目录浏览权限,默认是 off
    # autoindex on;
}

2.3 参数配置优化

具体配置参考: Nginx 参数配置优化

3 配置 Tomcat

编辑 Tomcat 根目录下的 conf/server.xml 文件,修改配置:

<!-- 添加 jvmRoute ,用于标识该 tomcat -->
<Engine defaultHost="localhost" name="Catalina" jvmRoute="tomcat1">

4 测试

在 Tomcat 根目录下的 webapps 下新建 test 目录,再在里面新建 test.jsp 文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@page import="java.util.*"%>

<html>
<head>
    <title>Tomcat集群测试</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
</head>
<body>
<%  
out.println(new Date() + "<br/>");
out.println("[tomcat1:8080]" + "<br/>");
String sessionid = request.getSession().getId();
out.println("sessionid: " + sessionid + "<br/>");
System.out.println("sessionid: " + sessionid);
out.println("=============================================<br/>");

Enumeration enu = request.getHeaderNames();  
while(enu.hasMoreElements()){  
	String key = (String)enu.nextElement();  
	out.println(key + ": " + request.getHeader(key) + "<br/>");  
}
out.println("=============================================<br/>");

out.println("request.remote: "+request.getRemoteAddr()+":"+request.getRemotePort() + "<br/>");
out.println("request.local: "+request.getLocalAddr()+":"+request.getLocalPort() + "<br/>");
out.println("=============================================<br/>");
%>
</body>
</html>

再在里面新建 WEB-INF/web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5">
	<display-name>test</display-name>
	<distributable />
</web-app>

test 目录如下:

5 其他说明

5.1 Nginx 日志

Nginx 根目录下的 logs 文件夹下:

  • access.log:用于记录 Nginx 接收到请求以及响应状态的日志。
  • error.log:用于记录 Nginx 的运行错误。
  • nginx.pid:用于记录进程 pid 。

5.2 Tomcat 日志

Tomcat 根目录下的 logs 文件夹下:

  • localhost_access_log.日期.txt:用于记录 Tomcat 接收到的请求以及响应的状态等,作用与 Apache 的 access.log 类似。
  • catalina.日期.log:用于记录 Tomcat 启动时候控制台的一些信息以及服务端错误信息。
  • localhost.日期.log:用于记录站点访问信息, Tomcat 下内部代码丢出的日志。

5.3 其他

Nginx 问题汇总



扫码关注微信公众号 程序员35 ,获取最新技术干货,畅聊 #程序员的35,35的程序员# 。独立站点:https://cxy35.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值