JAVA企业级应用Tomcat实战
1.Centos7的一些命令
# Centos7版本/etc/rc.local默认没有执行权限 chmod +x /etc/rc.d/rc.local # 才能启用这个文件用于开机执行命令 # 五种运行级别 ls -lh /usr/lib/systemd/system/runlevel*.target # 查看服务开机自启状态 chkconfig --list systemctl list-unit-files systemctl --type service # 查看服务详情 # 下面这两条ip命令用的不多 ip address show ip route show # 获取当前运行级别 systemctl get-default systemctl set-default graphical.target
2.部署Tomcat
# 常用java容器:WebSphere,WebLogic,Resin,Tomcat mkdir /application/ tar xf jdk-8u60-linux-x64.tar.gz -C /application/ ln -s /application/jdk1.8.0_60 /application/jdk # 添加环境变量 sed -ir '$a export JAVA_HOME=/application/jdk\n \ export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\n \ export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile java -version java version "1.8.0_60" tar xf apache-tomcat-8.5.37.tar.gz -C /application/ ln -s /application/apache-tomcat-8.5.37/ /application/tomcat echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile chown -R root.root /application/jdk/ /application/tomcat/ source /etc/profile cd /application/tomcat/ && tree -L 1 bin # 用以启动、关闭Tomcat或者其它功能的脚本 conf # 配置文件目录 lib # 存放web应用能访问的JAR包 logs # Catalina和其它Web应用程序的日志文件 temp # 临时文件 work # 存放JSP编译出的Servlet的.java和.class文件 # Web应用程序根目录 webapps cd webapps docs # 帮助文档 examples # web应用实例 host-manager # 管理 manager # 管理 ROOT # 默认网站根目录 /application/tomcat/bin/startup.sh 访问:http://10.0.0.50:8080/ cd /application/tomcat/logs/ catalina.out # tomcat实时日志,启动、报错日志都在这个日志里 tailf catalina.out # 看到下面这行表示tomcat启动成功 Server startup in 2117 ms
3.Tomcat主配置文件Server.xml详解
Tomcat管理功能用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用,仅供测试,生产环境禁止使用,默认处于禁用状态,在</tomcat-users>这一行上面加两行,访问http://10.0.0.50:8080/manager/status,报错403,是因为context.xml做了访问限制,修改一下,重启,输入账号密码即可.
vim /application/tomcat/conf/tomcat-users.xml <role rolename="manager-gui"/> <user name="admin" password="root123456" roles="manager-gui"/> </tomcat-users> vim /application/tomcat/webapps/manager/META-INF/context.xml allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10.0.0.*" /> # 降低安全隐患,将下面这些目录、文件都移走 mv docs/ examples/ host-manager/ manager/ ROOT/* /tmp/ # 把现在这个tomcat打成tar包,以后就不用再去下载,再去转移有隐患的目录 tar zcf tomcat-8.5.37.tar.gz /application/apache-tomcat-8.5.37/
8005端口之前监听在0.0.0.0上,现在监听在127.0.0.1上,telnet 127.0.0.1 8005 输入SHUTDOWN即可关闭tomcat,注释掉8009这一行;
tomcat能识别未被解压的war包,能自动部署,是因为下面这一行配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
connector:接收用户请求,类似于httpd的listen配置监听端口的;
service:将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine,一般情况下一个server内部只有一个service,一个service内部只有一个engine,但可以有多个connector.
4.自定义网站目录
假装自己有这个war包,memtest.war,上传,重启Tomcat,并访问http://10.0.0.50:8080/memtest/meminfo.jsp,
现在想以这个url访问此项目:http://10.0.0.50:8080/meminfo.jsp,有两种方法
# 方法一 将meminfo.jsp或其他程序放在ROOT目录下即可,因为默认网站根目录为tomcat/webapps/ROOT # 方法二 vim /application/tomcat/conf/server.xml <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>
Context表示一个web应用程序,通常为WAR文件;
docBase应用程序的路径或者是WAR文件存放的路径,也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****;
reloadable如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重启tomcat的情况下改变应用程序.
5.Tomcat多实例,日志在不同实例下的logs中
mkdir -p /data/www/www/ROOT cp /application/tomcat/webapps/memtest/meminfo.jsp /data/www/www/ROOT/ cp -a /application/apache-tomcat-8.5.37/ /application/tomcat8-1 cp -a /application/apache-tomcat-8.5.37/ /application/tomcat8-2 /application/tomcat8-1中8005改为8011,8080改为8081,appBase改为/data/www/www /application/tomcat8-2中8005改为8012,8080改为8082,appBase改为/data/www/www for i in {1..2};do /application/tomcat8_$i/bin/startup.sh;done netstat -tunlp|grep java 浏览器可以分别访问http://10.0.0.50:8081/meminfo.jsp和http://10.0.0.50:8082/meminfo.jsp 使用nginx反向代理Tomcat vim /application/nginx/conf/nginx.conf upstream web_pools { server 10.0.0.50:8081; server 10.0.0.50:8082; } server { listen 80; server_name tomcat.etiantian.org; location / { root html; index index.jsp index.html index.htm; proxy_pass http://web_pools; } } cat /etc/hosts 10.0.0.10 tomcat.etiantian.org 访问http://tomcat.etiantian.org/meminfo.jsp可以看到轮询效果
6.Tomcat安装Jpress
tar xf apache-maven-3.3.9-bin.tar.gz -C /application/ ln -s /application/apache-maven-3.3.9 /application/maven # 在/etc/profile中添加两行 MAVEN_HOME=/application/maven PATH="$MAVEN_HOME/bin:$PATH" jpress-web-newest.war位置https://github.com/JpressProjects/jpress cd /data/www/www/ROOT jar xf /root/jpress-web-newest.war 10.0.0.50:8081/install # 需要连接数据库,跟之前装WordPress是一样的
7.Tomcat安全优化和性能优化
A.安全优化
1).降权启动:以普通用户启动tomcat; 2).telnet管理端口保护:将8005改为其它端口,将SHUTDOWN口令改为其它; 3).ajp连接端口保护:将8009这个端口注释掉,AJP协议; 4).禁用管理端:将host-manager、manager等目录移走.
B.性能优化
1).屏蔽dns查询enableLookups="false"
2).jvm调优
优化catalina.sh配置文件,在catalina.sh配置文件中添加以下代码,放在最前面的位置
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"
-XX:PermSize:设定内存的永久保存区域,已被移除;
-XX:MaxPermSize:设定最大内存的永久保存区域,已被移除;
server:一定要作为第一个参数,在多个CPU时性能佳;
-Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些;
-Xmx:初始堆内存heap最大值,使用的最大内存;
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半.
参考博客:https://blog.csdn.net/woshizhangliang999/article/details/50644454