可能会遇到的问题
tomcat无法正常启动
---tomcat运行时需要随机字符串,默认从 /dev/random 获取
---某些系统中没有足够的字符,导致tomcat无法正常开启
解决方法:
[root@web1 tomcat]# mv /dev/random /dev/random.bak
[root@web1 tomcat]# ln -s /dev/urandom /dev/random #创建软链接
[root@web1 ~]# yum -y install java-1.8.0-openjdk #环境准备
[root@web1 ~]# java -version #检查
openjdk version "1.8.0_332"
[root@web1 ~]# ls ~/lnmp_soft/apache-tomcat-8.0.30.tar.gz #软件包
/root/lnmp_soft/apache-tomcat-8.0.30.tar.gz
[root@web1 ~]# cd lnmp_soft/
[root@web1 lnmp_soft]# tar -xf apache-tomcat-8.0.30.tar.gz
[root@web1 lnmp_soft]# cp -r apache-tomcat-8.0.30 /usr/local/tomcat
[root@web1 lnmp_soft]# cd /usr/local/tomcat/
[root@web1 tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
##################
conf 配置文件
logs 日志
bin 主程序
webapps 页面
temp 临时文件目录
lib 库文件目录(提前写好的某些功能文件)
work 编译文件目录
###################
[root@web1 tomcat]# bin/startup.sh #运行tomcat
[root@web1 tomcat]# ss -ntulp | grep java #少于3个端口,服务异常
tcp LISTEN 0 100 *:8080 *:* users:(("java",pid=2136,fd=50))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users:(("java",pid=2136,fd=73))
tcp LISTEN 0 100 *:8009 *:* users:(("java",pid=2136,fd=55))
[root@web1 tomcat]# bin/shutdown.sh #关闭tomcat
[root@web1 tomcat]# echo tomcat-test > webapps/ROOT/test01.html #自定义页面
[root@web1 tomcat]# bin/startup.sh
[root@web1 tomcat]# curl 192.168.99.100:8080/test01.html #访问测试
tomcat-test
虚拟web主机
<Host name="域名" appBase="页面位置">
</Host>
配置服务器虚拟主机
[root@web1 tomcat]# vim conf/server.xml #修改配置文件
<Host name="www.b.com" appBase="web_b"> #添加虚拟主机
</Host>
<Host name="www.a.com" appBase="webapps" #修改域名,测试
unpackWARs="true" autoDeploy="true"> #自动解war包 自动更新开发工程师编写的网站功能
...
...
</Host>
[root@web1 tomcat]# bin/shutdown.sh
[root@web1 tomcat]# bin/startup.sh
[root@web1 tomcat]# mkdir -p web_b/ROOT
[root@web1 tomcat]# echo tomcat-A > webapps/ROOT/index.html
[root@web1 tomcat]# echo tomcat-B > web_b/ROOT/index.html
[root@web1 tomcat]# echo 192.168.99.100 www.a.com www.b.com > /etc/hosts
[root@web1 tomcat]# curl www.a.com:8080
tomcat-A
[root@web1 tomcat]# curl www.b.com:8080
tomcat-B
[root@web1 tomcat]# yum -y install java-1.8.0-openjdk-devel #安装可以制作war包的工具
[root@web1 tomcat]# jar -cf a.war /var/log #之后可以使用jar命令打war包
[root@web1 tomcat]# cp a.war webapps/ #将war包放入虚拟主机的网页目录
[root@web1 tomcat]# ls webapps/ #检查,可以看到已经自动解开,如果无效可以尝试重启tomcat
a a.war docs examples host-manager manager ROOT
tomcat访问路径与页面位置
[root@web1 tomcat]# vim conf/server.xml
<Host name="www.b.com" appBase="web_b">
<Context path="" docBase="" />
</Host>
[root@web1 tomcat]# echo "web_b/ROOT/index.html" > web_b/ROOT/index.html #默认页面路径
[root@web1 tomcat]# echo "web_b/index.html" > web_b/index.html #创建素材,定义新路径
[root@web1 tomcat]# bin/shutdown.sh
[root@web1 tomcat]# bin/startup.sh
[root@web1 tomcat]# curl www.b.com:8080 #重启测试可以看到新路径
web_b/index.html
###
[root@web1 tomcat]# vim conf/server.xml
<Host name="www.b.com" appBase="web_b">
<Context path="" docBase="abc" /> #修改成abc
</Host>
[root@web1 tomcat]# mkdir web_b/abc #创建测试目录
[root@web1 tomcat]# echo "web_b/abc/index.html" > web_b/abc/index.html #测试页面
[root@web1 tomcat]# bin/shutdown.sh &> /dev/null
[root@web1 tomcat]# bin/startup.sh &> /dev/null
[root@web1 tomcat]# curl www.b.com:8080 #重启,见到新路径
web_b/abc/index.html
###
[root@web1 tomcat]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b">
<Context path="" docBase="/abc" /> #修改成/abc
</Host>
[root@web1 tomcat]# mkdir /abc #创建测试目录
[root@web1 tomcat]# echo "/abc/index.html" > /abc/index.html #创建测试文件
[root@web1 tomcat]# bin/shutdown.sh &> /dev/null
[root@web1 tomcat]# bin/startup.sh &> /dev/null
[root@web1 tomcat]# curl www.b.com:8080 #重启访问
/abc/index.html
###
[root@web1 tomcat]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b">
<Context path="/test" docBase="/abc" /> #path后面添加内容可以匹配用户访问路径,当用户访问www.b.com:8080/test/时,看到的是/abc的内容,如果访问www.b.com:8080就看到web_b/ROOT的内容
</Host>
[root@web1 tomcat]# bin/shutdown.sh &> /dev/null
[root@web1 tomcat]# bin/startup.sh &> /dev/null
[root@web1 tomcat]# curl www.b.com:8080/test/
/abc/index.html
[root@web1 tomcat]# curl www.b.com:8080
web_b/ROOT/index.html
###
[root@web1 tomcat]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.b.com" appBase="web_b">
<Context path="/test" docBase="abc" /> #修改成abc,当用户访问www.b.com:8080/test/时,可以看到web_b/abc里的内容;当用户访问www.b.com:8080,看到web_b/ROOT的内容
</Host>
[root@web1 tomcat]# bin/shutdown.sh &> /dev/null
[root@web1 tomcat]# bin/startup.sh &> /dev/null
[root@web1 tomcat]# curl www.b.com:8080/test/
web_b/abc/index.html
[root@web1 tomcat]# curl www.b.com:8080
web_b/ROOT/index.html
SSL加密网站
-genkeypair 生成密钥对
-alias tomcat 密钥别名
-keyalg RSA 定义密钥算法为RSA算法
-keystore 定义密钥文件存储在:/usr/local/tomcat/keystore
修改配置文件,创建支持加密连接的Connector
[root@web1 tomcat]# vim 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" />
#默认这段Connector被注释掉,去掉注释,添加密钥信息即可
<Host name="www.b.com" appBase="web_b">
</Host>
[root@web1 tomcat]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore #创建加密用的私钥和证书文件
[root@web1 tomcat]# bin/shutdown.sh
[root@web1 tomcat]# bin/startup.sh
[root@web1 tomcat]# ss -ntulp | grep java
tcp LISTEN 0 100 *:8443 *:* users:(("java",pid=5610,fd=55))
[root@web1 tomcat]# curl -k https://www.b.com:8443
web_b/ROOT/index.html
配置tomcat日志
directory 目录
prefix 前缀
suffix 后缀
例子:localhost_access_log.2023-12-13.txt
#复制默认虚拟主机的例子,适当修改即可
<Host name="localhost" appBase="webapps"
...
...
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
集群
tomcat环境、软件准备(99.100、99.200)
[root@web2 tomcat]# yum -y install java-1.8.0-openjdk
[root@web2 lnmp_soft]# tar -xf apache-tomcat-8.0.30.tar.gz
[root@web2 lnmp_soft]# cp -r apache-tomcat-8.0.30 /usr/local/tomcat
[root@web2 lnmp_soft]# cd /usr/local/tomcat/
[root@web2 tomcat]# echo tomcat-B > webapps/ROOT/index.html
[root@web2 tomcat]# bin/startup.sh
[root@web2 tomcat]# curl 192.168.99.200:8080
tomcat-B
nginx(99.5/88.5)
[root@proxy ~]# cd /usr/local/nginx/
[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf #这里是之前做过实验,配置文件恢复默认
[root@proxy nginx]# vim conf/nginx.conf
upstream tomcat {
server 192.168.99.100:8080;
server 192.168.99.200:8080 weight=3; #权重配置
}
location / {
proxy_pass http://tomcat;
...
...
}
[root@proxy nginx]# sbin/nginx -s reload #重载命令成功的前提是nginx是开启的
[root@proxy nginx]# ss -ntulp | grep nginx #查看服务端口
[root@proxy nginx]# curl 192.168.99.5 #测试访问 B出现三次,A出现一次