运维五 Tomcat服务器
JAVA
java Servlet
-
Servlet是java扩展Web服务器功能的组件规范
-
常见Servlet容器
- IBM websphere
- Oracle weblogic
- Apache tomcat
- RedHat Jboss
环境配置
yum -y install java-1.8.0-openjdk #安装jdk
#获得tomcat软件包解压
cp apache-tomcat-8.0 /usr/local/tomcat #复制到自己定义的工作目录
cd /usr/local/tomcat
ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
#logs日志 lib库 conf配置文件 webapps网站页面东西 temp临时文件目录 work自动编译的目录
ls bin
bootstrap.jar commons-daemon.jar daemon.sh setclasspath.sh startup.sh tool-wrapper.sh
catalina.bat commons-daemon-native.tar.gz digest.bat shutdown.bat tomcat-juli.jar version.bat
catalina.sh configtest.bat digest.sh shutdown.sh tomcat-native.tar.gz version.sh
catalina-tasks.xml configtest.sh setclasspath.bat startup.bat tool-wrapper.bat
#可以看到.bat .sh 支持windows和Linux (^-^)V
#启动tomcat
bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
ss -nutlp | grep 8080 #看下服务名 pgrep tomcat没有。。。
tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=12261,fd=46)) #这叫java?
#关闭tomcat
bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
#再查查看
ss -nutlp | grep 8080 #没了 好像进程是叫java啊
ss -ntulp | grep java
tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=12353,fd=67))
tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=12353,fd=51))
tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=12353,fd=46))
#tomcat服务总共3个端口 8005 8009 8080
#如果关闭掉
yum -y install psmisc
killall java
存在问题
-
问题描述
- 运行tomcat 可能8005端口服务未启动 startup.sh shutdown.sh用不了 只能干等
-
问题分析
- tomcat8005端口启动需要一个随机字符串 由/dev/random提供 但是/dev/random比较慢 可能在tomcat启动了都给不出一个随机字符串 所以就存在tomcat8005端口缺少的情况
-
解决方法一
-
本质原因 /dev/random太慢了 那就变快就好了
-
mv /dev/random /dev/random.bak #备份/dev/random ln -s /dev/urandom /dev/random #用/dev/urandom 软链接替换 软连接快不用复制
-
/dev/urandom 产生随机字符 但是是有现成的(现货快)
-
-
解决方法二
-
yum -y install rng-tools #8005端口无法开启 systemctl start tngd #启动服务就好
-
为什么能解决 原理我也不知道
-
tomcat使用
使用案例
cd /usr/local/tomcat/webapps/ROOT/
cat << EOF > index.jsp
<html>
<body>
<center>
Now time is : <%=new java.util.Date()%>
</center>
</body>
</html>
EOF
cd /usr/local/tomcat
bin/startup.sh #重启下
curl 192.168.2.100:8080
<html>
<body>
<center>
Now time is : Mon Dec 14 21:56:52 EST 2020
</center>
</body>
</html>
#算是完成基本使用了
httpd nginx tomcat配置虚拟主机格式
-
httpd
-
<Virtualhost *:80> servername www.a.com documentroot /var/www/html </virtualhost>
-
-
nginx
-
http { server { lister:80; server_name localhost; location /{ root html; index index.html index.htm; } } }
-
-
tomcat
-
<Host name="www.a.com" appBase="webapps"> #H大写 XML 有区别的!!!!! <Context path="" docBase=""/> #path为虚拟路径 docBase是物理路径 指定webapps的下一级"ROOT"目录 为空默认指定ROOT </Host>
-
配置tomcat虚拟主机测试案例
vim /usr/local/tomcat/conf/server.xml
======================================
<Host name="www.b.com" appBase="web_b">
</Host>
<Host name="www.a.com" appBase="webapps"
unpackWARs="true" autoDeploy="true"> #autoDeploy自动更新 #如果网页更新了话
#unpackWARs 自动解war包
#yum -y install java-1.8.0-openjdk-devel #提供jar命令压缩出war包
#jar -cf xyz.war /var/log
#cp xyz.war /usr/local/tomcat/webapps #拷贝war包到能自动解压的webapps目录
#ls /usr/local/tomcat/webapps
#xyz xyz.war #发现webapp目录下war包被自动释放了
</Host>
======================================
vim /etc/hosts
==========================================
192.168.2.100 www.a.com www.b.com www.c.com
=============================================
/usr/local/tomcat/bin/shutdown.sh #关闭
/usr/local/tomcat/bin/startup.sh #重启
echo "web_a" > /usr/local/tomcat/webapps/ROOT/index.html
mkdir -p /usr/local/tomcat/web_b/ROOT
echo "web_b" > /usr/local/tomcat/web_b/ROOT/index.html
curl www.a.com:8080
web_a
curl www.b.com:8080
web_b
windows下的hosts配置文件是c:\Windows\System32\drivers\etc\hosts
docBase和path测试
vim /usr/local/tomcat/conf/server.xml
=========================================
<Host name="www.b.com" appBase="web_b"> #appBase定义默认目录
<Context path="/haha" docBase="xyz"/> #docBase定义实际网页文件位置,相对路径默认appBase定义的目录下
#绝对路径就是绝对路径了
<Context path="" docBase="ROOT"> #path为空 定义的其实是虚拟路径/
</Host>
==========================================
#说明 web_b下的ROOT中index.html 内容为 web_b
#说明 web_b下的xyz中index.html 内容为 xyz
curl www.b.com:8080 #path定义了虚拟路径 所以默认还是ROOT了
web_b
curl www.b.com:8080/haha/index.html #可以这样访问 :8080/haha这样是不行的
xyz
添加虚拟主机的日志功能
vim /usr/local/tomcat/conf/server.xml
==========================================
<Host name="www.b.com" appBase="web_b">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="www.b.com" suffix=".log" #定义日志文件名为www.b.com.log linux下.txt无意义
pattern="%h %l %u %t "%r" %s %b" /> # 固定格式占位符
</Host>
==========================================
curl www.b.com:8080
#重复访问多次
tail -5 /usr/local/tomcat/logs/www.b.com.log #查看日志
192.168.2.100 - - [15/Dec/2020:03:35:25 -0500] "GET / HTTP/1.1" 200 5
192.168.2.100 - - [15/Dec/2020:03:35:26 -0500] "GET / HTTP/1.1" 200 5
192.168.2.100 - - [15/Dec/2020:03:35:26 -0500] "GET / HTTP/1.1" 200 5
192.168.2.100 - - [15/Dec/2020:03:35:26 -0500] "GET / HTTP/1.1" 200 5
192.168.2.100 - - [15/Dec/2020:03:35:27 -0500] "GET / HTTP/1.1" 200 5
#OK了
添加SSL加密https服务 8443
vim /usr/local/tomcat/conf/server.xml
============================================#
<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" #密码123456
/>
=========================================================
keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore
#genkeypair 生成公私钥成对的
#alias 别名
#keyalg 使用加密的算法是 RSA
#keystore 生成路径+文件名
#输入密码123456 对应配置文件里面的keystorePass
#一通交互得到密钥和公钥
#重启tomcat
ss -nutlp | grep java
tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=17994,fd=74))
tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=17994,fd=55))
tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=17994,fd=46))
tcp LISTEN 0 100 :::8443 :::* users:(("java",pid=17994,fd=51))
###多了个8443端口服务!!!
curl -k https://www.b.com:8443 #8443提供服务https服务
web_b