MENU

安装配置tomcat8.5启用apr及优化配置

2017 年 06 月 19 日 • 应用服务器

tomcat之前总是玩7,而且现在看官网现在已经出9了,我到现在8都没怎么玩过,然而现在机会来了,有需求要必须使用jdk1.8+和tomcat8+版本,但只是一台服务器,不需要做集群,试着搞了一下,感觉和7比起来配置这块区别不是很大,因为之前也没写过7的安装配置文档,今天就以8.5为例来写一个吧,7的配置和它几乎一样,开撸。

配置java环境变量

[root@10-10-25-39 ~]# tar zxf jdk-8u131-linux-x64.tar.gz -C /usr/local/  ##解压jdk
[root@10-10-25-39 ~]# cat >>/etc/profile<<OEF
> export JAVA_HOME=/usr/local/jdk1.8.0_131
> export PATH=\$JAVA_HOME/bin:\$PATH 
> export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
> OEF                ##添加变量
[root@10-10-25-39 ~]# source /etc/profile  ##使变量生效
[root@10-10-25-39 ~]# java -version        ##查看结果
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

安装tomcat

1.下载安装启动
[root@10-10-25-39 src]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz ##下载 
[root@10-10-25-39 src]# tar zxf apache-tomcat-8.5.15.tar.gz -C ../  ##解压
[root@10-10-25-39 src]# cd ../
[root@10-10-25-39 local]# mv apache-tomcat-8.5.15/ tomcat
[root@10-10-25-39 local]# cd tomcat/bin/
[root@10-10-25-39 bin]# find . -type f -name "*.bat" -exec rm -rf {} \; ##删除bat文件,用不到
[root@10-10-25-39 bin]# ./catalina.sh start   ##启动tomcat 默认占用8080端口
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_131
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

验证安装是否成功
查看log
[root@10-10-25-39 bin]# tail -f ../logs/catalina.out
访问默认页面

看到上面的两样东西就安装成功了。

配置内存及PID文件

tomcat在不做任何内存配置的情况下,默认是占用物理内存的四分之一,内存这块按自己的实际情况来吧,因为我只是安装一个tomcat,一会还需要一个nginx及redis,云服务器内存4G,所以tomcat内存分了最大2G,一些常用的参数全部都加进去了,仅供参考吧。

[root@10-10-25-39 bin]# vim catalina.sh
JAVA_OPTS=" -server -Xms2048M -Xmx2048M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
CATALINA_PID=/usr/local/tomcat/tomcat.pid

如果你是使用JDK1.7版本,请参考这个。

JAVA_OPTS=" -server -Xms2048M -Xmx2048M -XX:PermSize=256M -XX:MaxNewSize=512M -XX:MaxPermSize=512M -XX:+UseParNewGC -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"

接下来重启一下tomcat使配置生效,因为刚刚配置了PID的位置,现在用脚本关闭已经关不掉了,所以嘛,直接杀,然后再启动。

[root@10-10-25-39 bin]# kill -9 `ps aux | grep /usr/local/tomcat/ | grep -v grep | awk {'print $2'}`
[root@10-10-25-39 bin]# ./catalina.sh start

有必要说明一下,刚刚在内存配置那里添加了-Djava.security.egd=file:/dev/./urandom这个参数,如果不加这个tomcat启动会非常慢,看log是卡到了这里,看图。

20171118031502.png

原因是session引起的随机数问题导致的,Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥, 主要原因是生成随机数的时候卡住了,导致tomcat启动非常慢,是否有足够的熵来用于产生随机数,可以通过如下命令来查看。

[root@rj-bai ~]# cat /proc/sys/kernel/random/entropy_avail   #查看熵的值
182
[root@rj-bai ~]# cat /dev/random                             #访问该文件,产生随机数,tomcat生成随机数的时候也是访问的这个。
J»QIpL}7¶~w@/^C
[root@rj-bai ~]# cat /proc/sys/kernel/random/entropy_avail   #再次查看熵的值,访问一次就会有消耗
9
[root@rj-bai ~]# rj-bai                                      #随便输入命令,可以增加熵的值
-bash: rj-bai: 未找到命令
[root@rj-bai ~]# cat /proc/sys/kernel/random/entropy_avail   #再次查看熵的值
21

因为没有足够的熵值来提供随机数,所以Tomcat就会出现启动很的情况,因为JVM出现了等待状态,如果在tomcat启动期间你没有操作服务器,而是一直等着,那到tomcat启动完成真的不知道得到什么时候了。

所以解决方法就是加速/dev/random提供随机数的速度,解决方法上面说两种了,一种是添加-Djava.security.egd=file:/dev/./urandom到启动脚本。另一种就是狂输命令,无论对错,来增加熵的值,如果使用这个方法建议使用while循环,哈哈。最后还有一种方法就是安装一个软件包,来解决这个问题。

[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# yum -y install rng-tools #熵服务,增大熵池
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# /etc/init.d/rngd start
Starting rngd: 
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# /etc/init.d/rngd status
rngd (pid  21295) is running...
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# cat /proc/sys/kernel/random/entropy_avail
3183

emmmm,做完这个,不要去看/dev/random,否则后果很严重,启动这个服务后熵值一直是3000多,不用去担心熵值不够用了,上面三种方法任选其一吧,建议使用狂输命令的方式,哈哈,其实做完上面的配置tomcat就可以正常使用了,下面都是一些优化方面的东西,有需要的阔以继续向下看。

性能优化方面

tomcat有三种运行模式,分别是bio、nio、apr。bio为tomcat的默认运行模式,性能最差,没有经过任何优化处理和支持,nio拥有比传统I/O操作(bio)更好的并发运行性能。而apr从操作系统级别来解决异步的IO问题,大幅度的提高性能, apr也是在tomcat上运行高并发应用的首选模式,既然APR这么屌,下来就来启用tomcat的APR运行模式吧,以CentOS为例,开撸。

官方要求

后面的那个包名是乌班图系列的,不是CentOS。
APR 1.2+ development headers (libapr1-dev package)
OpenSSL 0.9.7+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)

编译装,yum装的不行,版本不够,下载地址
http://apr.apache.org/download.cgi

我是用的是apr-1.5.2及apr-util-1.5.4,emmmmmm,如果你用的是Ubuntu/Debian系列的系统,使用apt-get的方式去安装一下APR,版本是可以达到要求的,openssl就不行了,得手动编译去装了,CentOS的就别想了,按着下面的来吧。

下载软件包
[root@10-10-25-39 src]# wget http://apache.fayea.com/apr/apr-1.5.2.tar.gz
[root@10-10-25-39 src]# wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.gz

下载完毕,开始安装,注意顺序不能错了。

安装apr
[root@10-10-25-39 src]# tar zxf apr-1.5.2.tar.gz 
[root@10-10-25-39 src]# cd apr-1.5.2
[root@10-10-25-39 apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@10-10-25-39 apr-1.5.2]# make && make install
安装apr-util
[root@10-10-25-39 src]# tar zxf apr-util-1.5.4.tar.gz 
[root@10-10-25-39 src]# cd apr-util-1.5.4
[root@10-10-25-39 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@10-10-25-39 apr-util-1.5.4]# make && make install

注意!不是安装成功之后就完事了,需要改点东西。

[root@10-10-25-39 apr-util-1.5.4]# mv /usr/bin/apr-1-config /usr/bin/apr-1-config.old
[root@10-10-25-39 apr-util-1.5.4]# ln -s /usr/local/apr/bin/apr-1-config /usr/bin/
[root@10-10-25-39 apr-util-1.5.4]# mv /usr/bin/apu-1-config /usr/bin/apu-1-config.old
[root@10-10-25-39 apr-util-1.5.4]# ln -s /usr/local/apr-util/bin/apu-1-config /usr/bin/

其实这里不用这样做也可以,一会在编译tomcat-native.tar.gz的时候手动指定一下apr的位置到安装位置就可以了,如果没有指定位置,他将通过$PATH环境变量去找该命令,下面的openssl一样。

先回家了,家没锁门,明天再继续吧,哈哈

安装openssl

编译安装OpenSSL,要求是>=1.0.2

我用的版本是1.1.0f

[root@10-10-25-39 openssl-1.1.0f]# wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz  #下载
[root@10-10-25-39 src]# tar zxf openssl-1.1.0f.tar.gz #解包
[root@10-10-25-39 src]# cd openssl-1.1.0f
[root@10-10-25-39 openssl-1.1.0f]# ./config --prefix=/usr/local/openssl
[root@10-10-25-39 openssl-1.1.0f]# make && make install  #编译安装
[root@10-10-25-39 openssl-1.1.0f]# cat >>/etc/profile<<OEF
export PATH=\$PATH:/usr/local/openssl/bin
OEF        #写入变量
[root@10-10-25-39 openssl-1.1.0f]# source /etc/profile  #立即生效
[root@10-10-25-39 openssl-1.1.0f]# mv /usr/bin/openssl /usr/bin/openssl.old #原来的命令重命名
[root@10-10-25-39 openssl-1.1.0f]# ln -s /usr/local/openssl/bin/openssl /usr/bin/  #软连接新命令

查看OpenSSL版本,但是抛错了。

[root@10-10-25-39 openssl-1.1.0f]# openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

原因是OpenSSL的库位置不正确造成的,首要查找文件,然后进行软链即可。

查找缺少库的位置

[root@10-10-25-39 ~]# find / -type f -name "libssl.so.1.1"
/usr/local/openssl/lib/libssl.so.1.1
/usr/local/src/openssl-1.1.0f/libssl.so.1.1
[root@10-10-25-39 ~]# find / -type f -name "libcrypto.so.1.1"
/usr/local/openssl/lib/libcrypto.so.1.1
/usr/local/src/openssl-1.1.0f/libcrypto.so.1.1

找到之后进行软连接,即可解决这个问题。

[root@10-10-25-39 ~]# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@10-10-25-39 ~]# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
[root@10-10-25-39 ~]# openssl version
OpenSSL 1.1.0f  25 May 2017

现在官方要求已经达到了,现在开始编译tomcat-native.tar.gz,并配置tomcat支持apr

配置tomcat支持apr

[root@10-10-25-39 bin]# pwd
/usr/local/tomcat/bin
[root@10-10-25-39 bin]# tar zxf tomcat-native.tar.gz #解压
[root@10-10-25-39 bin]# cd tomcat-native-1.2.12-src/native/
[root@10-10-25-39 native]# ./configure --with-ssl=/usr/local/openssl/ --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/jdk1.8.0_131/  #编译参数,按实际路径来
[root@10-10-25-39 native]# make && make install

tomcat8是默认开启apr模式的,如果tomcat找不到apr则以nio模式启动tomcat,看一眼启动log,apr路径tomcat只认识这几个,所以现在要把apr软链接过来。如果没发现这个,编辑配置文件,将以下注释去掉

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
[root@10-10-25-39 ~]# mkdir -p /usr/java/packages/lib/amd64
[root@10-10-25-39 ~]# ln -s /usr/local/apr/lib/* /usr/java/packages/lib/amd64/

软链接之后重启,查看log,发现还是以nio模式启动的,并不是apr模式,所以要改一下运行模式。下面是官网的tomcat8.5文档,卧槽,还是官方的东西靠谱,具体如下。

http

AJP

修改tomcat配置文件
[root@10-10-25-39 conf]# sed -i '69s#HTTP/1.1#org.apache.coyote.http11.Http11AprProtocol#g' server.xml 
[root@10-10-25-39 conf]# sed -i '116s#AJP/1.3#org.apache.coyote.ajp.AjpAprProtocol#g' server.xml

修改完成后重启,看到下面三行就表示成功了,之前是nio模式,具体看一下上面第三张图对比一下就知道了。

emmmmmm,把自我用的server.xml配置文件贴出来吧,针对你高并发加了点优化参数,把没有的注释也全部去掉了,仅供参考吧,官方说明地址

<?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="off" />
  <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">

   <Executor
   name="tomcatThreadPool"
   namePrefix="catalina-exec-"
   maxThreads="500"
   minSpareThreads="30"
   maxIdleTime="60000"
   prestartminSpareThreads = "true"
   maxQueueSize = "100"
  />

<Connector
   executor="tomcatThreadPool"
   port="8080"
   protocol="org.apache.coyote.http11.Http11AprProtocol"
   connectionTimeout="60000"
   maxConnections="10000"
   enableLookups="false"
   acceptCount="100"
   maxPostSize="10485760"
   maxHttpHeaderSize="8192"
   compression="on"
   disableUploadTimeout="true"
   compressionMinSize="2048"
   acceptorThreadCount="2"
   compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
   URIEncoding="utf-8"
   processorCache="20000"
   tcpNoDelay="true"
   connectionLinger="5"
  />
    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="/wwwroot/tomcat1"
       unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

说一下端口这里吧,tomcat在没有做任何修改之前启动会占用三个端口,分别是8005,8009,8080端口,说一下分别的作用,8005端口是用来关闭tomcat的,其实这样做也可以关闭tomcat。

root@iZ2ze0mdoie43suqpu7euyZ:~# echo SHUTDOWN|nc 127.0.0.1 8005

向8005端口发送SHUTDOWN指令即可,有兴趣的可以拿线上服务器试试,哈哈,如果没有nc命令可以用yum装一下,其实建议把这个配置修改一下,在server.xml的第二行,包括端口号和指令。8009没用,直接关了,8080就不用说了,http端口,因为8443端口我也用不到,就在配置文件中去掉了,8443是https端口。

内核优化

上周吧,有些服务器并发很高,看了一眼连接数,发现TIME_WAIT和CLOSE_WAIT的连接非常多,ESTABLISHED只有1000多,TIME_WAIT和CLOSE_WAIT加起来已经到将近3000了,现在找了一个没加内核优化的服务器,看了一眼,如下。

20171122103510.png

这个有点蛋疼,查了一下,要设置内核的参数了,让服务器能够快速回收和重用那些TIME_WAIT的资源,在/etc/sysctl.conf文件加入以下内容即可。

net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_orphan_retries=3
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_probes=5
net.core.netdev_max_backlog=3000
net.ipv4.tcp_fin_timeout=60
[root@iZ2ze4358u3sd16q9at3o2Z ~]# sysctl -p

加完以后过一分钟后再看一下,TIME_WAIT就降下来了。

20171122103839.png

emmmmmm,对于性能优化这里暂时就这么多吧,下面是安全优化。

安全优化

安全优化这里其实最主要就是以普通用户身份去启动tomcat,还有就是将tomcat自带的webapps目录下全部的东西删掉,下面的管理页面真的很危险,不建议在生产环境使用,我去年就被通过管理页面黑过一次,而且管理页面也是一个半成品,可能会有各种漏洞,所以说,都删了吧,ROOT目录可以留着,但是ROOT下面的内容要清空,这个就自己删吧,下面说一下以非root身份去启动tomcat的办法,很简单。

非root身份启动tomcat

先看一下,现在是以root身份运行的tomcat,其实很简单

方法一

20171120141544.png

[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# useradd tomcat  #添加tomcat用户
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# chown tomcat.tomcat -R /usr/local/server/tomcat1/       #授权目录
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# su -c '/usr/local/server/tomcat1/bin/startup.sh' tomcat #以tomcat身份去启动tomcat

20171120143353.png

这样就可以了,其实也可以只允许用tomcat用户去启动tomcat进程,别的用户不行,root也别想启动,这样做感觉保险一点,操作如下。

方法二

1.首先要删除全局java环境变量。

[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# sed -i '/\JAVA_HOME/d' /etc/profile
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# source /etc/profile
[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# java -version
-bash: java: command not found

2.切换到tomcat用户,修改tomcat用户变量

[root@iZ8vb56h5lnjuv9e0n8q2dZ ~]# su - tomcat      #切换到tomcat
[tomcat@iZ8vb56h5lnjuv9e0n8q2dZ ~]$ vim .bashrc    #修改用户环境信息
export JAVA_HOME=/usr/local/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[tomcat@iZ8vb56h5lnjuv9e0n8q2dZ ~]$ source .bashrc #立即生效
[tomcat@iZ8vb56h5lnjuv9e0n8q2dZ ~]$ java -version  #查看版本
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[tomcat@iZ8vb56h5lnjuv9e0n8q2dZ ~]$ /usr/local/server/tomcat1/bin/startup.sh #启动tomcat

20171120144627.png

试试用root启动tomcat,起不来,提示找不到变量,别的用户也一样,现在就只能用tomcat用户去启动tomcat了,目的达到了,对了,如果网站根目录不在tomcat的webapps下,记得改一下属主组,这两种方式任选其一吧,建议用第二种。

20171120145341.png

端口问题

如果你以普通用户身份启动了tomcat,而且tomcat使用的是80端口,会抛错,创建端口的时候提示拒绝访问,使用8080端口正常,看log

20171127153333.png

这个是因为非root用户无法使用1024以下端口,解决办法,将tomcat配置改回8080,要么是前面挂一个nginx,或是用iptables进行端口转发就可以了,nginx就不说了,iptables规则如下。

[root@ansible ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080端口转发

还有个问题,直接写了吧,买的数据库没有外网IP,想连接只能用内网,一会要用外网访问,没必要搞个VPN出来,就用iptables,将本机的3306端口转发到数据库的3306,本机内网IP172.21.0.3,数据库内网IP172.21.0.16,开撸。

[root@VM_0_3_centos ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@VM_0_3_centos ~]# sysctl -p   //开启转发
[root@VM_0_3_centos ~]# iptables -t nat -A PREROUTING -d 172.21.0.3 -p tcp --dport 3306 -j DNAT --to-destination 172.21.0.16:3306
[root@VM_0_3_centos ~]# iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -p tcp --dport 3306 -j SNAT --to-source 172.21.0.3
[root@VM_0_3_centos ~]# iptables-save > /etc/sysconfig/iptables
[root@VM_0_3_centos ~]# vim /etc/sysconfig/iptables
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited //注释这条,否则会不通
[root@VM_0_3_centos ~]# systemctl restart iptables.service //重启iptables
[root@VM_0_3_centos ~]# iptables -t nat -L -n

20171204114238.png

多实例

有时候一个服务器装一个tomcat感觉有点浪费了,要不再加几个?哈哈,这个也比较简单,复制一份tomcat改个名,如果是按着我的配置文件写的,改一下配置文件的8080和8005端口,webapps位置就可以了,以此类推即可,不做演示了。

nginx反向代理

emmmmmm,个人习惯即使是只一个tomcat前面也挂一个nginx,有些东西tomcat是做不到的,譬如设置静态文件缓存时间,启用压缩,最重要的是动静分离,因为tomcat处理静态文件效率真的很低,而nginx处理静态文件很屌,可以提升整体响应速度,何乐而不为?这里有之前写过的文档,包括动静分离nginx反向代理负载均衡,如果做了负载均衡,开发人员没有解决session共享问题,就需要我们自己来解决这个问题了,可以参考一下这里,有需要的阔以参考一下撒。

对于启用了nginx反向代理,tomcat日志这里就需要调一下了,如果不调对默认情况下tomcat的access日志记录的都是代理服务器的IP,需要改点东西,tomcat日志格式这里阔以去参考一下这里,都是模块化的,点这里。下面是nginx代理tomcat,tomcat获取用户真实IP日志这块的配置吧,很简单,改点东西就好了。

nginx添加如下。

        proxy_set_header X-Real-IP $remote_addr;
#       proxy_set_header X-Forwarded-For $remote_addr;  #这个注释掉。

pattern修改如下,%-h可以去掉了,显示的是nginx的IP,现在第一行就会显示用户的真实IP了,如果没用到反向代理就不要动这个,重启nginx及tomcat自己看效果去吧。

              pattern="%{X-FORWARDED-FOR}i %l %u %t &quot;%r&quot; %s %b" />

到此,一个比较完善的tomcat就配置完成了,阔以复制出一份tomcat,做多实例,将该tomcat打包,以后别的服务器要直接复制过去解包就可以用了,但是要注意一点,如果是启用了apr,目标服务器也要有启用apr的必需环境,而且要重新装一个tomcat下bin目录的包,如果没有,需要装一下,暂时就这样吧,以后有东西再加。

参考

Apache Tomcat 8.5 安全配置与高并发优化

最后编辑于: 2018 年 12 月 10 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码