Tomcat服务
安装
- 安装
java
环境
yum install -y java-1.8.0-openjdk
java -version
- 安装
Tomcat
,这里以apache-tomcat-8.0.30.tar.gz
为例
tar -xvf apache-tomcat-8.0.30.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-8.0.30 /usr/local/tomcat
: << 'EOF'
# 相关目录介绍
tomcat
├── bin # 存放主程序
├── conf # 存放配置文件
├── lib # 存放库文件
├── LICENSE
├── logs # 存放日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps # 存放网站页面
└── work # 存放编译后页面文件
EOF
- 启动
Tomcat
mv /dev/random /dev/random.bak
ln -s /dev/urandom /dev/random
yum install rng-tools
systemctl start rngd && systemctl enable rngd
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh
相关配置
- 配置文件存放路径:
/usr/local/tomcat/conf/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="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"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" />
<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="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="test_dir" />
<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
的默认端口改为80
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
# 这里修改成80
<Connector port="80" protocol="HTTP/1.1"
...
EOF
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
- 访问
http://www.a.com/xxx文件
,实际命中的是/data/www_a_com/
中的xxx
文件
echo "192.168.3.200 www.a.com" >> /etc/hosts
mkdir -p /data/www_a_com
echo "/data/index.html" > /data/index.html
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
<Engine name="Catalina" defaultHost="localhost">
...
<!-- 添加新的虚拟主机 -->
<Host name="www.a.com" appBase="/data/www_a_com"
unpackWARs="true" autoDeploy="true">
<!-- 下面这行如果不加,会命中/data/www_a_com/ROOT/xxx -->
<Context path="" docBase="" />
</Host>
<!-- 默认的不动 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
EOF
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
curl http://www.a.com/index.html
- 访问
http://www.a.com/test/index.html
,实际命中的是/var/www/html/index.html
,并且给www.a.com
虚拟主机添加日志功能,日志存放在/data/www_a_com/logs/www_a_com.log
中
echo "/var/www/html/index.html" > /var/www/html/index.html
mkdir /data/www_a_com/logs
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
<Host name="www.a.com" appBase="/data/www_a_com"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="" />
<!-- 添加下面几行,这里的directory需要配置绝对路径才行,不然会出现/usr/local/tomcat/logs/中 -->
<Context path="/test" docBase="/var/www/html" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/www_a_com/logs"
prefix="www_a_com" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
EOF
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
curl www.a.com/test/index.html
- 将
war
包直接丢/usr/local/tomcat/webapps/下
,测试会不会自动解压
echo "test war" > index.html
yum install -y java-1.8.0-openjdk-devel
jar -cf project.war index.html
cp project.war /usr/local/tomcat/webapps/
ls /usr/local/tomcat/webapps/
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
<!-- 这里使用的是默认的进行测试 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 只需添加这一行即可,这样访问localhost的会自动命中project目录,不会使用ROOT -->
<Context path="" docBase="project" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
EOF
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
curl 192.168.3.200/index.html
- 开启
https
vim /usr/local/tomcat/conf/server.xml
: << 'EOF'
<!-- 将这一段的注释去掉,然后在最后加上keystoreFile和keystorePass -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" />
EOF
cd /usr/local/tomcat/
keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
: << 'EOF'
输入密钥库口令: # 填配置文件中keystorePass定义的字符串
再次输入新口令: # 再次输入
您的名字与姓氏是什么?
[Unknown]: lu # 任意
您的组织单位名称是什么?
[Unknown]: test # 任意
您的组织名称是什么?
[Unknown]: test # 任意
您所在的城市或区域名称是什么?
[Unknown]: Wuxi # 任意
您所在的省/市/自治区名称是什么?
[Unknown]: JiangSu # 任意
该单位的双字母国家/地区代码是什么?
[Unknown]: cn # 任意
CN=lu, OU=test, O=test, L=Wuxi, ST=JiangSu, C=cn是否正确?
[否]: y # y
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车): # 回车即可
EOF
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
echo "test https" > webapps/ROOT/index.html
curl -k https://192.168.3.200:8443
- 使用
systemctl
命令控制
/usr/local/tomcat/bin/shutdown.sh
vim /usr/lib/systemd/system/tomcat.service
: << 'EOF'
[Unit]
Description=The Apache Tomcat Server # 描述
After=network.target remote-fs.target nss-lookup.target # 在这些服务启动之后才能启动这个服务
[Service]
Type=forking # 多进程类型程序,就设置forking
ExecStart=/usr/local/tomcat/bin/startup.sh # systemctl start tomcat执行命令
ExecStop=/bin/kill -s QUIT ${MAINPID} # systemctl stop tomcat执行命令
[Install]
WantedBy=multi-user.target # 支持开启自启
EOF
systemctl daemon-reload
systemctl start tomcat
systemctl status tomcat
curl -k https://192.168.3.200:8443
systemctl stop tomcat
systemctl status tomcat
curl -k https://192.168.3.200:8443
systemctl restart tomcat
systemctl status tomcat
curl -k https://192.168.3.200:8443