Linux Tomcat JSP 动态网页解析 v7.0
1 Tomcat 概述
Tomcat 是由 Apache 软件基金会下属的 Jakarta 项目开发的一个 Servlet 容器, 按照 Sun Microsystems 提供的技术规范, 实现了对 Servlet 和 JavaServer Page(JSP)的支持, Tomcat 本身也是一个 HTTP 服务器, 可以单独使用, apache 是一个以 C 语言编写的 HTTP 服务器. Tomcat 主要用来解析 JSP 语言. 目前最新版本为 8.0.
常见版本: 5.5x 6.0x 7.0x
官网: Apache.tomcat.org
2 Tomcat JDK
JDK: java 开发工具包, 包含 JRE,javac ,javaw 工具
JRE:java 运行环境, 在 JDK 包中
SDK: 辅助开发工具, java 开发的套件
针对不同使用的类库
J2EE: 企业应用
J2SE: 标准
J2ME: 手机
3 Tomcat 安装
安装 tomcat 之前需要安装 jdk (Java Development Kit) 是 Java 语言的软件开发工具包(SDK)), 这里选择 jdk-6u18-linux-x64-rpm.bin,bin 文件安装跟 sh 文件方法一样, sh ./ jdk-6u18-linux-x64-rpm.bin, 回车即可, 默认安装到 / usr/java/jdk1.6.0_18 目录下.
下载 JDK 与 Tomcat.
? jdk 下载地址:
- ? http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
- ? http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.rpm
- http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz?AuthParam=1480477540_8dd19bbd8e9b40171c9830eba9d480a6
配置 JDK 环境变量
配置 java 环境变量, vi /etc/profile 添加如下语句:
- export JAVA_HOME=/usr/local/jdk1.8
- export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
- export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
- source /etc/profile // 使环境变量立刻生效.
- java -version // 查看 java 版本, 显示版本为 1.6.0_18, 证明安装成功.
? tomcat 下载地址:
- http://tomcat.apache.org/
- wget -c http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.tar.gz
在官网下载 tomcat 相应版本, 下载完后解压:
tar -xzf apache-tomcat-6.0.30.tar.gz
;mv apache-tomcat-8.0.39 /usr/local/tomcat 即可.
启动 tomcat, 命令为:/usr/local/tomcat/bin/startup.sh
查看 ps -ef |grep tomcat 进程及端口是否存在,
通过页面访问可以看到 tomcat 默认测试页面:
生成链接以便版本升级
ln -s apache-tomcat-7.0.54 server
生成链接以便版本升级
- ln -s jdk1.7.0_55 latest
- ln -s latest default
4 Tomcat 配置文件详解
<Server>................................Server 层
<Service>............................Service 层
<Connector/>
<Engine>..........................Engine 层
<Host>.........................Host 层
<Context/>...............Context 层
</Host>
</Engine>
</Service>
<Server>
Server 层
对应 Server 组件, 表示整个 Tomcat(Catalina Servlet 容器), 它处于 Tomcat 顶层, 可以包含一个或多个 Service 层.
对应 Service 组件, 是 Server 层中的一个逻辑功能层, 包含一个 Engine 层, 以及一个或多个 Connector,Service 组件将一个或多个 Connector 组件绑定到 Engine 层上, Connector 组件侦听端口, 获得用户请求, 并将请求转发到 Engine 层处理, 同时把处理结果转发给用户, 从而实现一个特定的功能.
Engine 层
对应 Engine 组件, 负责请求分发处理, 可以连接多个 Connector, 它从 Connector 接收请求后, 解析出可以完成用户请求的 URL, 根据 URL 可以把请求匹配到正确的 Host 上, 当 Host 处理完用户请求后, Engine 层把结果返回给适合连接器, 再由连接器传输给用户.
Host 层
对应 Host 组件, 表示一个虚拟主机, 一个 Engine 层可以包含多个 Host 层, 每个 Host 层可以包含一个或多个 Context 层, 对应不同的 web 应用.
Context 层
对应 Context 组件, 代表某个虚拟主机上的实际目录或一个 WAR, 即单个 Web 应用程序, 它运行在特定的虚拟主机中, 使用最为频繁. 一个 Host 层包含多个 Context 层, 每一个 Context 都有唯一的路径, Host 层接到请求后, 根据用户请求的 URL, 将请求定位到 Context 层.
元素名 属性 解释
server port 指定一个端口, 这个端口负责监听关闭 tomcat 的请求
shutdown 指定向端口发送的命令字符串
service name 指定 service 的名字
Connector ( 表示客户端和 service 之间的连接) port 指定服务器端要创建的端口号, 并在这个断口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为 true , 则可以通过调用 request.getRemoteHost() 进行 DNS 查询来得到远程客户端的实际主机名, 若为 false 则不进行 DNS 查询, 而是返回其 ip 地址
redirectPort 指定服务器正在处理 http 请求时收到了一个 SSL 传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时, 可以放到处理队列中的请求数, 超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数( 以毫秒为单位)
Engine ( 表示指定 service 中的请求处理机, 接收和处理来自 Connector 的请求) defaultHost 指定缺省的处理请求的主机名, 它至少与其中的一个 host 元素的 name 属性值是一样的
Context ( 表示一个 web 应用程序, 通常为 WAR 文件, 关于 WAR 的具体信息见 servlet 规范) docBase 应用程序的路径或者是 WAR 文件存放的路径
path 表示此 web 应用程序的 url 的前缀, 这样请求的 url 为 http://localhost:8080/path/****
reloadable 这个属性非常重要, 如果为 true , 则 tomcat 会自动检测应用程序的 / WEB-INF/lib 和 / WEB-INF/classes 目录的变化, 自动装载新的应用程序, 我们可以在不重起 tomcat 的情况下改变应用程序
host ( 表示一个虚拟主机 ) name 指定主机名
appBase 应用程序基本目录, 即存放应用程序的目录
unpackWARs 如果为 true , 则 tomcat 会自动将 WAR 文件解压, 否则不解压, 直接从 WAR 文件中运行应用程序
Logger ( 表示日志, 调试和错误信息) className 指定 logger 使用的类名, 此类必须实现 org.apache.catalina.Logger 接口
prefix 指定 log 文件的前缀
suffix 指定 log 文件的后缀
timestamp 如果为 true , 则 log 文件名中要加入时间, 如下例: localhost_log.2001-10-04.txt
Realm ( 表示存放用户名, 密码及 role 的数据库) className 指定 Realm 使用的类名, 此类必须实现 org.apache.catalina.Realm 接口
Valve ( 功能与 Logger 差不多, 其 prefix 和 suffix 属性解释和 Logger 中的一样) className 指定 Valve 使用的类名, 如用 org.apache.catalina.valves.AccessLogValve 类可以记录应用程序的访问信息
directory 指定 log 文件存放的位置
pattern 有两个值, common 方式记录远程主机名或 ip 地址, 用户名, 日期, 第一行请求的字符串, HTTP 响应代码, 发送的字节数. combined 方式比 common 方式记录的值更多
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" # HTTP 连接方式
connectionTimeout="20000"
redirectPort="8443" /> # 重定向 8443
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
AJP 连接方式
<Engine name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
自动解压 war 包 自动布署 (生产建议关闭自动布署)
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t"%r"%s %b" />
</Host>
</Engine>
</Service>
</Server>
注意: tomcat 的配置文件中的注释内容不能使用 #号, 而要使用<!-- xxxxxx -->
5 Tomcat 定义发布目录
默认发布目录: /usr/local/tomcat/webapps/ROOT
[注] : 修改发布目录时, 要把源 webapps / 目录下所有文件 rm -rf *, 否则 tomcat 默认去找原目录
Vi /usr/local/tomcat/conf/server.xml
修改程序部署路径:
方法 1:
<Host name="localhost" appBase="E:\www\javapms" unpackWARs="true" autoDeploy="true">
appBase="E:\www\javapms" 设置程序部署路径,
在 server.xml 尾部的</Host > 前面插入下面一行参数.
方法 2:<Context path="/" docBase="/data/webapps/www" reloadable="true"/>
</Host> #此处插入
path: 浏览器访问时的路径名
docBase:web 项目的 WebRoot 所在的路径, 注意是 WebRoot 的路径, 不是项目的路径. 其实也就是编译后的项目
reloadble: 设定项目有改动时, tomcat 是否重新加载该项目
测试网页 index.jsp
<html>
<body>
<h1>tomcat jsp test page</h1>
<%=new java.util.Date()%>
</body>
</html>
6 Tomcat 服务与端口
[注意] : 生产环境中, tomcat 有二个工作目录,
[root@tomcat01 tomcat8]# ll
rw-r--r--. 1 root root 16195 11 月 9 2016 RUNNING.txt
drwxr-xr-x. 4 root root 4096 11 月 30 08:51 temp
drwxr-xr-x. 7 root root 4096 11 月 29 08:53 webapps
drwxr-xr-x. 3 root root 21 11 月 14 23:22 work
此工作目录发产生一些临时文件, 建议在重启 tomcat 的时候, 手动清空这二个文件夹.
6.1 启动和关闭
常用 java 解析器: tomcat resin jboss weblogic websphere
生产使用环境: tomcat6.0
生产管理环境:
- chown -R tomcat.tomcat /usr/local/jdk/
- chown -R tomcat.tomcat /usr/local/tomcat
su - tomcat 切换到 tomcat 用户下执行启动 tomcat
停止
- PID =$(ps -ef |grep java |grep -v "grep"|awk '{print $2}') # 通过 shell 取 java 的 PID
- Kill -9 PID
- /usr/local/tomcat8/bin/shutdown.sh
启动
/usr/local/tomcat8/bin/startup.sh
6.2 默认端口: 8005 8080 8009
关管端口 shutdown.sh 的控制端口
访问端口 http 连接端口
代理端口
6.3 防火墙配置:
打开防火墙, 使外部能访问
- /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
- service iptables save
- service iptables restart
或直接修改文件 / etc/sysconfig/iptables.
vi /etc/sysconfig/iptables
A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
service iptables restart
在浏览器输入: http://192.168.16.133:8080/
如在本机可以输入: http://localhost:8080/
出现 tomcat 的页面表示安装成功.
6.4 jsp 测试页:
- vim /usr/local/tomcat8/webapps/ROOT/index.jsp
- <html>
- <body>
- <center>Now time is: <%=new java.util.Date()%></center>
- </body>
- </html>
7 Tomcat 管理 进程脚本
/usr/local/tomcat/webapps/ROOT 发布目录 tomcat
如果启动多个 tomcat 服务, 需要修改 800
8080 8009 端口, 复制一次 tomcat 目录
Tomcat 守护进程脚本
- !/bin/bash
- usage(){
- echo "USAGE: start | stop | status"
- }
- define PID
- tomcat_pid=
- ps -ef |grep tomcat | grep -v "grep" |awk '{print $2}'
- TOMCAT_PATH=/usr/local/tomcat/
- start(){
- /usr/local/tomcat8/bin/startup.sh
- }
- status(){
- ps -ef |grep tomcat | grep -v "grep"
- }
- stop(){
- kill -9 $tomcat_pid
- sleep 5
- cd $TOMCAT_PATH
- rm temp/ -rf
- rm work/ -rf
- TOMCAT_STATUS=$tomcat_pid
- if [ -z $TOMCAT_STATUS ];then
- echo "tomcat stop"
- else
- kill -9 $tomcat_pid
- fi
- }
- MAIN(){
- case $1 in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- status
- ;;
- *)
- usage
- esac
- }
- MAIN $1
8 Tomcat 安全管理配置规范
8.1 管理端口保护 8005
- tcp6 0 0 127.0.0.1:8005 :::* LISTEN 35830/java
- [root@apache01 webapps]# telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
能过 telnet 命令连接到 8005 端口, 可以执行 SHUTDOWN 命令关闭 tomcat
优化方案:
修改默认的 8005 端口, 修改 shutdown 指定字符串
<Server port="8005" shutdown="SHUTDOWN">
将端口修改成随机端口, 将关闭命令修改成任意字符
8.2 ajp 连接端口 8009
修改默认的 8009 端口, 通过 Iptables 控制 ajp 端口访问
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
保护此端口的目的在于防止线下的测试流量被 mod_jk 转发至线上 tomcat 服务器
8.3 禁用管理端
删除 tomcat / 目录的一些 host-manager docs examples 或者将 tomcat 的目录设定为
tomcat 以外的目录
对于前端 web 模块, tomcat 管理端属于 tomcat 高危安全隐患, 一旦被攻破,××× 通过上
传 web shell 的方式将会直接取得服务器的控制
修改默认的发布目录站点位置
<Context path="/" docBase="/data/webapps/www" debug="0" reloadable="true" crossContext="true"/>
8.4 降权启动
以非 root 用户启动 tomcat
8.5 文件列表访问控制
conf/web.xml 文件中 default 部分 listings 的配置必须为 false;
false 为不列出目录文件, true 为允许, 默认 false
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
8.6 版本信息隐藏
1. 修改 conf/web.xml, 重定向 403,404 以及 500 等错误到指定的错误页面,
2. 也可以修改应用程序目录下的 WEB-INF/web.xml 下的配置进行错误页面的重定向
<error-page>
<error-code>403</error-code>
<location>/forbidden.jsp</location>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-code>
<error-page>
<error-code>500</error-code>
<location>/systembusy.jsp</location>
</error-page>
在配置中对一些常见错误进么重定向, 避免当出现错误时, tomcat 默认显示的错误页面暴
露服务器和版本信息, 必须确保程序根目录下的错误页面已经存在
8.7 server header 重写
在 HTTP Connector 配置中加入 server 的配置
server="webserver"
当 tomcat HTTP 端口直接提供 web 服务时, 此配置生效, 加入此配置, 将会替换 http 响
应 server header 部分的默认配置, 默认是 Apache-Coyote/1.1
示例:
[root@tomcat01 conf]# curl --head 127.0.0.1:8080
HTTP/1.1 403 Forbidden
Server: Apache-Coyote/1.1
Cache-Control: private
Expires: Thu, 01 Jan 1970 08:00:00 CST
Content-Type: text/html
Content-Length: 559
Date: Sun, 31 Dec 2017 14:28:10 GMT
修改配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" server="nginx1.1"/>
修改后的结果
[root@tomcat01 scripts]# curl --head 10.204.3.7:8080
HTTP/1.1 403 Forbidden
Cache-Control: private
Expires: Thu, 01 Jan 1970 08:00:00 CST
Content-Type: text/html
Content-Length: 559
Date: Sun, 31 Dec 2017 14:33:57 GMT
Server: nginx1.1
8.8 访问限制
通过限制, 限制访问的 ip 来源
ip 的白名单, 拒绝非白名单 IP 的访问, 此配置主要是针对高保密级别的系统,
<Context docBase="/data/webapps/www" debug="0" reloadable="false" crossContext="true"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.*" deny="*.*.*.*" />
</Context>
8.9 起停脚本权限回收
去除其他用户对 tomcat 的 bin 目录下的 shutdown.sh startup.sh catalina.sh 的执行权限
chmod -R 744 tomcat/bin/*
8.10 访问日志格式规范
开启 tomcat 默认访问日志中的 referer 和 User-Agent 记录, 是为了一旦出现安全问题能够更好的根据
日志进行问题排查
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
- prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %r %b %{Referer}i %{User-Agent}i $D" resolveHosts="false" />
9 Tomcat 的状态管理和 host 管理
管理状态页文件
/usr/local/tomcat8/webapps/manager
修改配置文件
vim /usr/local/tomcat8/conf/tomcat-users.xml
在最后</tomcat-users > 段前添加的内容如下:
- <role rolename="admin-gui"/>
- <user username="tomcat" password="s3cret" roles="admin-gui"/>
重启服务
访问状态页
http://10.204.3.6:8080/manager
10 Tomcat 多实例
11 Tomcat 性能优化
11.1 硬件资源优化
比如内存, 硬盘
11.2 架构上的优化
利用缓存和压缩 在 nginx 前端
做动静分离 缓解 tomcat 压力
搭建集群 采用 nginx 请求分流
11.3 JVM 参数调优
优化文件: /usr/local/tomcat/bin/catalina.sh
- CATALINA_OPTS="
- server
- Xms6000M
- Xmx6000M
- Xss512k
- XX:NewSize=2250M
- XX:MaxNewSize=2250M
- XX:PermSize=128M
- XX:MaxPermSize=256M
- XX:+AggressiveOpts
- XX:+UseBiasedLocking
- XX:+DisableExplicitGC
- XX:+UseParNewGC
- XX:+UseConcMarkSweepGC
- XX:MaxTenuringThreshold=31
- XX:+CMSParallelRemarkEnabled
- XX:+UseCMSCompactAtFullCollection
- XX:LargePageSizeInBytes=128m
- XX:+UseFastAccessorMethods
- XX:+UseCMSInitiatingOccupancyOnly
- Duser.timezone=Asia/Shanghai
- Djava.awt.headless=true"
参数的详细配置, 参考: http://blog.51cto.com/zhongliang/2101918
11.4 Tomcat 参数优化
这里着重讲解 tomcat 参数的优化: server.xml 文件, 关闭 DNS 查询, 配置最大并发等参数.
maxThreads:tomcat 起动的最大线程数, 即同时处理的任务个数, 默认值为 200
acceptCount: 当 tomcat 起动的线程数达到最大时, 接受排队的请求个数, 默认值为 100
当然这些值都不是越大越好, 需要根据实际情况来设定. 可以基于测试的基础上来不断的调优分析.
- <Connector port="8080"
- protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" 连接超时
redirectPort="8443"
maxThreads="500" 最大线程 就是最大并发数
minSpareThreads="20" 最小空闲线程数
acceptCount="100" 队列大小 等待处理的
disableUploadTimeout="true" 类似于 Apache 中的 keeyalive 一样
enableLookups="false" 关闭 DNS 查询
URIEncoding="UTF-8" />
maxSpareThreads : 最大空闲线程数
acceptCount 是当线程数达到 maxThreads 后, 后续请求会被放入一个等待队列, 这个 acceptCount 是这个队列的大小, 如果这个队列也满了, 就直接 refuse connection
压缩
compression="on" compressionMinSize="2048 compressableMimeType="text/html,text/xml,text/javascript,text/CSS,text/plain"
11.5 外部调优
禁用 DNS 查询
调整线程数(线程池)
maxThreads="600" 最大线程数
minSpareThreads="100" 初始化时创建的线程数
maxSpareThreads="500" 一旦创建的线程越过这个值, Tomcat 就会关闭不再需要的 socket 线程
acceptCount="700" 指定当所有可以使用的处理请求的线程数都被使用时, 可以放到处理队列中的请求数, 超过这个数的请求将不予处理
压缩
11.6 java 工具 监控和管理控制台
在 windows 端安装 jdk 包, 找到以下命令
在 c:\ Program Files\jdk\bin\jconsole.exe 监控和管理控制台
通过 IP: 端口连接到监控和 JAVA 控制台
在 c:\ Program Files\jdk\bin\jvisualvm.exe
通过 IP: 端口连接 管理工具
在 tomcat 服务器上修改配置文件
catalina.sh 中加入配置, 放置在 #!/bin/bash 标签下
- vim /usr/local/tomcat8/bin/catalina.sh
- !/bin/bash
- CATALINA_OPTS="$CATALINA_OPTS
- Djava.rmi.server.hostname=10.204.3.7
- Dcom.sun.management.jmxremote
- Dcom.sun.management.jmxremote.port=12345
- Dcom.sun.management.jmxremote.authenticate=true
- Dcom.sun.management.jmxremote.ssl=false
- Dcom.sun.management.jmxremote.pwd.file=/usr/local/jdk1.7/jre/lib/management/jmxremote.password"
配置权限文件
- cd /usr/local/jdk1.7/jre/lib/management/
- cp jmxremote.password.template jmxremote.password
- vi jmxremote.password
- zhongliang 123456 # 用户名 zhongliang 密码 249765270
- chmod 600 jmxremote.password
重启 tomcat 服务, 开启监听端口 12345
连接 jconsole 和 jvisualvm
输入远程主机: 端口 10.204.3.7:12345
选择文件 -添加 JMX.. 连接 -10.204.3.7:12345
CPU 使用情况 堆, 垃级回收 抽样器
实时线程数
注意: 在控制台上执行 GC 清理的时候, 会出现前端断连
12 Zabbix 监控 tomcat
zabbix 编译的时候, 指定 --enable-java
yum 安装的时候, yum install zabbix-java
- vim zabbix_server.conf
- JavaGateway=192.168.3.14
- JavaGatewayPort=10052
- StartJavaPollers=5
第三方工具, cmdline-jmxclient
http://crawler.archive.org/cmdline-jmxclient/
13 Apache 整合 tomcat
安装 httpd
安装 tomcat
编译生成 mod_jk.
下载 tomcat-connectors-1.2.42-src.tar.gz 包
- Wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
- tar xzvf tomcat-connectors-1.2.42-src.tar.gz
- cd tomcat-connectors-1.2.42/native
- ./configure --with-apxs=/usr/local/apache2/bin/apxs
- make
- cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/
配置.
在 / usr/local/apache/conf / 下面建立两个配置文件 mod_jk.conf 和 workers.properties.
vi mod_jk.conf#######################
添加以下内容:
指出 mod_jk 模块工作所需要的工作文件 workers.properties 的位置
- JkWorkersFile /usr/local/apache/conf/workers.properties
- Where to put jk logs
- JkLogFile /usr/local/apache/logs/mod_jk.log
- Set the jk log level [debug/error/info]
- JkLogLevel info
- Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions indicate to send SSL KEY SIZE,
- JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
- JkRequestLogFormat set the request format
- JkRequestLogFormat "%w %V %T"
将所有 servlet 和 jsp 请求通过 ajp13 的协议送给 Tomcat, 让 Tomcat 来处理
- JkMount /servlet/ worker1
- JkMount /.jsp worker1
- vi workers.properties###########################
添加以下内容:
Defining a worker named worker1 and of type ajp13
- worker.list=worker1
- Set properties for worker1
- worker.worker1.type=ajp13
- worker.worker1.host=localhost
- worker.worker1.port=8009
- worker.worker1.lbfactor=50
- worker.worker1.cachesize=10
- worker.worker1.cache_timeout=600
- worker.worker1.socket_keepalive=1
- worker.worker1.socket_timeout=300
整合 apache 和 tomcat
- Vim httpd.conf#############
- DirectoryIndex index.jsp index.html
添加 index.jsp
LoadModule jk_module modules/mod_jk.so
加载 mod_jk.so 模块
Include /usr/local/apache/conf/mod_jk.conf
引入配置文件
将 tomcat 和 apache 的发布目录设置成一致. 建立站点文件 index.jsp
14 Nginx 整合 Tomcat 集群
- T_INSTALL_DIR=/usr/local/tomcat
- Port=export 8005+1
复制多个 tomcat 到 tomcat1 tomcat2 tomcat3
修改对应每个发布目录的端口
安装 nginx
- tar zxvf nginx-1.7.8.tar.gz // 解压
- cd nginx-1.7.8
- ./configure --with-http_stub_status_module --with-http_ssl_module// 启动 server 状态页和 https 模块
- make && make install
修改 nginx.conf 配置文件, 添加一个 location
- location ~ .(jsp|do)$ {
- index index.jsp;
- proxy_pass http://192.168.74.129:8081/ ; // 来自 jsp 或者 do 的后缀的请求交给 tomcat 处理</span>
- proxy_redirect off;
- proxy_set_header Host $host; // 后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- client_max_body_size 10m; // 允许客户端请求的最大单文件字节数
- client_body_buffer_size 128k; // 缓冲区代理缓冲用户端请求的最大字节数
- proxy_connect_timeout 90; //nginx 跟后端服务器连接超时时间
- proxy_read_timeout 90; // 连接成功后, 后端服务器响应时间
- proxy_buffer_size 4k; // 设置代理服务器 (nginx) 保存用户头信息的缓冲区大小
- proxy_buffers 6 32k; //proxy_buffers 缓冲区, 网页平均在 32k 以下的话, 这样设置
- proxy_busy_buffers_size 64k;// 高负荷下缓冲大小(proxy_buffers*2)
- proxy_temp_file_write_size 64k; // 设定缓存文件夹大小, 大于这个值, 将从 upstream 服务器传
- }
tomcat 虚拟主机
tomcat 配置状态信息
tomcat 配置错误页面优雅显示
tomcat 配置管理页面
tomcat 配置日志管理
15 Tomcat 故障
日志文件
/usr/local/tomcat/logs/catalina.out
[注] :tomcat 查端口时正常, 服务正常, 但访问后, 服务消失,
问题原因: 因为配置文件不正确, 导致报错, 服务自动停止
解决方法: 检查配置文件
例如: 配置文件中没有定义发布目录, 但是发布目录中的 ROOT 已被删除, 会导致此类问题发生
- 15.1 cannot execute binary file
- /usr/local/tomcat8/bin/catalina.sh: line 433: /usr/local/jdk1.8/bin/java: cannot execute binary file
- [root@tomcat01 local]# java --version
- bash: /usr/local/jdk1.8/bin/java: cannot execute binary file
原因: 软件版本与系统版本不一致
15.2 insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.
tomcat 部署 jenkins 启动报错:
insufficient free space available after evicting expired cache entries-consider increasing the maximum size of the cache.
解决该问题方法, 修改 tomcat/conf/context.xml 文件, 增加资源最大可缓存的大小:
- <Resources
- cachingAllowed="true"
- cacheMaxSize="102400"
- />
来源: http://www.bubuko.com/infodetail-2708968.html