安装环境
软件准备:java环境,tomcat下载
JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat下载:http://tomcat.apache.org/
##### 安装java #####
#jdk解压,二进制包,不用编译,软件接是因为名字太长了
[root@moban6 ~]# tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
[root@moban6 ~]# ln -s /usr/local/jdk1.8.0_60 /usr/local/jdk
#配置java环境变量(必须要有,否则启动tomcat找不到的)
[root@moban6 ~]# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JIAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
[root@moban6 ~]# tail -3 /etc/profile
export JAVA_HOME=/usr/local/jdk #java装在哪了
export PATH=$JIAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH #添加环境变量
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
#立刻生效
[root@moban6 ~]# source /etc/profile
#看版本号
[root@moban6 ~]# which java
/usr/local/jdk/jre/bin/java
[root@moban6 ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
##### 安装tomcat #####
#直接解压,无编译安装
[root@moban6 ~]# tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local/
[root@moban6 ~]# ln -s /usr/local/apache-tomcat-8.0.27/ /usr/local/tomcat
#配置tomcat环境变量
[root@moban6 ~]# echo 'export TOMCAT_HOME=/usr/local/tomcat' >> /etc/profile
[root@moban6 ~]# source /etc/profile
Tomcat 目录介绍
[root@moban6 ~]# cd /usr/local/tomcat/
# -L 1 :只显示第一级目录(L和数字之间有空格)
[root@moban6 tomcat]# tree -L 1
.
├── bin #命令
├── conf #配置文件
├── lib #存放Web应用能访问的JAR包
├── LICENSE
├── logs #日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp #临时目录
├── webapps #网页目录
└── work #用以产生有JSP编译出的servelet的.java和.class文件
7 directories, 4 files
#里面的文件有漏洞,工作中我们自己写
[root@moban6 tomcat]# ll webapps/
total 20
drwxr-xr-x. 14 root root 4096 Apr 28 20:11 docs #tomcat帮助文档
drwxr-xr-x. 6 root root 4096 Apr 28 20:11 examples #web应用实例
drwxr-xr-x. 5 root root 4096 Apr 28 20:11 host-manager #管理
drwxr-xr-x. 5 root root 4096 Apr 28 20:11 manager #管理
drwxr-xr-x. 3 root root 4096 Apr 28 20:11 ROOT #默认网站的根目录
启动Tomcat
启动程序:/usr/local/tomcat/bin/startup.sh
关闭程序:/usr/local/tomcat/bin/shutdown.sh
[root@moban6 tomcat]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat #Using都是在检查环境变量
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
#默认监听端口8080
[root@moban6 tomcat]# ss -antup| grep 8080
tcp LISTEN 0 100 :::8080 :::* users:(("java",1122,46))
# 然后直接去网页输入当前的服务器的 IP:8080 就能看到了(不用映射)
tomcat 配置文件
#tomcat格式文件是以.xml的
[root@moban6 tomcat]# cd /usr/local/tomcat/conf/
root@moban6 conf]# ll -h
total 216K
drwxr-xr-x. 3 root root 4.0K Apr 28 20:33 Catalina
-rw-------. 1 root root 13K Sep 28 2015 catalina.policy
-rw-------. 1 root root 7.0K Sep 28 2015 catalina.properties
-rw-------. 1 root root 1.6K Sep 28 2015 context.xml
-rw-------. 1 root root 3.4K Sep 28 2015 logging.properties
-rw-------. 1 root root 6.4K Sep 28 2015 server.xml #主配置文件
-rw-------. 1 root root 1.8K Sep 28 2015 tomcat-users.xml #管理用户的配置文件
-rw-------. 1 root root 1.9K Sep 28 2015 tomcat-users.xsd
-rw-------. 1 root root 164K Sep 28 2015 web.xml
测试功能。生产环境不要用
Tomcat管理功能用于对Tomcat自身以及部署在Tomcat上的应用惊醒管理的Web应用。在默认情况下是处于禁用状态的,如果需要开启这个功能,就需要配置配置管理用户,即tomcat-users.xml
[root@moban6 conf]# cat -n /usr/local/tomcat/conf/tomcat-users.xml |sed -n '39p'
39 </tomcat-users>
#在其上加入三行代码
[root@moban6 ~]# sed -i '39i <role rolename="manager-gui"/>\n<role rolename="admin-gui"/>\n<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>' /usr/local/tomcat/conf/tomcat-users.xml
[root@moban6 ~]# cat -n /usr/local/tomcat/conf/tomcat-users.xml | tail -5
38 -->
39 <role rolename="manager-gui"/>
40 <role rolename="admin-gui"/>
41 <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
42 </tomcat-users>
[root@moban6 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@moban6 ~]# /usr/local/tomcat/bin/startup.sh
tmocat主配置文件Serer.xml 详解
Server.xml组件类别
- 顶级组件:位于整个配置文件的顶层,如server
- 容器类组件:可以包含其他组件的组件,如service,engine,host,context
- 连接器组件:连接用户请求至tomcat。如connector
- 被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve,logger
组件详解
- engine核心容器组件,catalina引擎,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host
- host:类似于httpd中的虚拟主机,一般而言支持基于FQDN的虚拟主机
- context:定义一个应用程序,是一个最内层的容器类组件(不能再嵌套),配置context的主要目的指定对应对的webapp的根目录,类似于httpd的alias。其还能为webapp指定额外的属性,如部署方式等
- connextor:接收用户请求,类似于httpd的listen配置监听端口
- service(服务):将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine,service内部有两个connector,一个engine,因此,一般情况下一个sever内部只有一个service,一个service内部只有一个engine,但一个service内部可以有多个connector
- server:表示一个云从于JVM中的tomcat实例
- Valve:阀门,拦截请求并再将其转至对应的webapp前进行魔种处理操作,可以用于任何容器中,比如记录日志(access log value),基于IP做访问控制(remote address filer valve)
- logger:日志记录器,用于记录组件内部的状态信息,可以用于除context外的任何容器中
- realm:可以用于任何容器类的组件中,关联一个用户认证库,实现认证和授权。可以关联的认证库有两种:UserDatabaseRealm,MemoryRealm和JDBCRealm
- UserDatebaseRealm:使用JNDI自定义的用户认证库
- MemoryRealm:认证信息定义在tomcat-users.xml中
- JDBCRealm:认证信息定义在数据库中,并通过JDBC连接至数据库中查找认证用户。
tomcat主配置文件
[root@moban6 ~]# vim /usr/local/tomcat/conf/server.xml
1 <?xml version='1.0' encoding='utf-8'?> #版本,支持格式
22 <Server port="8005" shutdown="SHUTDOWN"> #如果向8005发送(远程也行)关闭请求,就关了tomcat服务了
#telnet 127.0.0.1 8005 登陆进去了,然后输入大写SHUTDOWN 回车,就关闭了tomcat服务
#所以 这个端口需要修改
53 <Service name="Catalina">
69 <Connector port="8080" protocol="HTTP/1.1"
91 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #AJP协议
#直接注释掉91行 tomcat注释:"<!-- -->"这是一对 改为如下
#91 <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
103 <Engine name="Catalina" defaultHost="localhost"> #defaultHost 默认域名
#103 <Engine name="Catalina" defaultHost="www.yunjisuan.com">
123 <Host name="localhost" appBase="webapps" #根目录 webapps
#123 <Host name="www.yunjisuan.com" appBase="webapps"
124 unpackWARs="true" autoDeploy="true"> #是否自动解压war包
WEB站点部署
上线的代码有两种方式
第一种方式是直接将程序目录放在webapps目录下面。
第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面。
[root@moban6 ~]# vim /usr/local/tomcat/conf/server.xml
#修改 91行注释掉,103和123行改域名
91 <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
103 <Engine name="Catalina" defaultHost="www.yunjisuan.com">
123 <Host name="www.yunjisuan.com" appBase="webapps"
#重启服务
[root@moban6 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@moban6 ~]# /usr/local/tomcat/bin/startup.sh
#配置war包
[root@moban6 ~]# ls
apache-maven-3.3.9-bin.tar.gz jdk-8u60-linux-x64.tar.gz memtest.war
apache-tomcat-8.0.27.tar.gz jpress-web-newest.war
[root@moban6 ~]# cd /usr/local/tomcat/webapps/
[root@moban6 webapps]# rm -rf docs/ examples/ host-manager/ manager
[root@moban6 webapps]# rm -rf ROOT/*
#把家目录下的两个包移动过来以后,自动给出一个目录
[root@moban6 webapps]# mv ~/jpress-web-newest.war .
[root@moban6 webapps]# mv ~/memtest.war .
[root@moban6 webapps]# ls
jpress-web-newest jpress-web-newest.war memtest.war ROOT
#但是memtest没有自动给出目录,所以重启服务(自动将war包解压缩,重启后会强制触发自己检查)
[root@moban6 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@moban6 ~]# /usr/local/tomcat/bin/startup.sh
[root@moban6 webapps]# ls
jpress-web-newest jpress-web-newest.war memtest memtest.war ROOT
现在java的web服务器已经部署好了,但是,显示了子目录,不想显示的话
- 方法一:将meminfo.jsp或其他程序放到tomcat/webapps/ROOT 目录下即可,因为默认网站根目录为 tomact/webapps/ROOT
- 方法二:修改配置文件,限定web站点的根目录路径,如下:
[root@moban6 webapps]# vim /usr/local/tomcat/conf/server.xml
123 <Host name="www.yunjisuan.com" appBase="webapps" #这行是本来有的
124 unpackWARs="true" autoDeploy="true"> #这行是本来有的
125 <Context path="" docBase="/usr/local/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true" /> #这行是添加的
[root@moban6 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@moban6 ~]# /usr/local/tomcat/bin/startup.sh
Tomcat多实例
复制Tomcat目录
[root@moban6 webapps]# cd /usr/local/
#cp -a 在保留原文件属性的前提下复制文件
[root@moban6 local]# cp -a apache-tomcat-8.0.27/ tomcat8_1
[root@moban6 local]# cp -a apache-tomcat-8.0.27/ tomcat8_2
修改多实例配置文件
#创建多实例的网页根目录
[root@moban6 local]# mkdir -p /data/www/www/ROOT
#将网页程序拷贝到多实例根目录ROOT下
[root@moban6 local]# cp /usr/local/tomcat/webapps/memtest/meminfo.jsp /data/www/www/ROOT/
#原多实例配置文件的三行
[root@moban6 local]# cat -n /usr/local/tomcat/conf/server.xml |sed -n '22p;63p;123p'
22 <Server port="8005" shutdown="SHUTDOWN"> #管理端口及停止命令
69 <Connector port="8080" protocol="HTTP/1.1" #对外提供服务的端口
123 <Host name="localhost" appBase="webapps" #网站域名及网页根目录路径
#修改多实例配置文件的以下三行
[root@moban6 local]# vim /usr/local/tomcat8_1/conf/server.xml
[root@moban6 local]# cat -n /usr/local/tomcat8_1/conf/server.xml |sed -n '22p;69p;123p'
22 <Server port="8020" shutdown="SHUTDOWN">
69 <Connector port="8081" protocol="HTTP/1.1"
123 <Host name="www.yunjisuan.com" appBase="/data/www/www"
#两个多实例目录可以分开
[root@moban6 local]# vim /usr/local/tomcat8_1/conf/server.xml
[root@moban6 local]# cat -n /usr/local/tomcat8_1/conf/server.xml |sed -n '22p;69p;123p'
22 <Server port="8030" shutdown="SHUTDOWN">
69 <Connector port="8082" protocol="HTTP/1.1"
123 <Host name="www.yunjisuan.com" appBase="/data/www/www"
#开启多实例
[root@moban6 local]# /usr/local/tomcat8_1/bin/startup.sh
[root@moban6 local]# /usr/local/tomcat8_2/bin/startup.sh
[root@moban6 local]# ss -antup| grep java
#访问各自的网页 IP:端口/meminfo.jsp
Tomcat 集群(Nginx + Tomcat反向代理集群)
安装nginx
#gcc gcc-c++ make
mount /dev/sr0 /media/cdrom
yum -y install pcre-devel openssl-devel
cd ~
wget -q http://nginx.org/download/nginx-1.10.2.tar.gz
tar xf nginx-1.10.2.tar.gz -C /usr/src
cd /usr/src/nginx-1.10.2/
useradd -M -s /sbin/nologin nginx
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin
cd /usr/local/nginx/conf/
egrep -v "#|^$" nginx.conf.default > nginx.conf
echo "`hostname -I` www.`hostname`.com" >> /etc/hosts
修改配置文件
worker_processes 1;
events {
worker_connections 20480;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream tomcat_pools {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server {
listen 80;
server_name www.yunjisuan.com;
location / {
root html;
index index.jsp index.html index.htm;
proxy_pass http://tomcat_pools;
}
}
}
/usr/local/nginx/sbin/nginx
用Tomcat安装Jpress
Jpress是一个wordpress(PHP博客)的java代替版本,使用JFinal开发,需要maven支持
[root@moban6 ~]# tar xf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
[root@moban6 ~]# ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven
[root@moban6 ~]# sed -i '$a export MAVEN_HOME=/usr/local/maven\nexport PATH=$MAVEN_HOME/bin:/$PATH' /etc/profile
[root@moban6 ~]# source /etc/profile
#出现下面的。表示成功
[root@moban6 ~]# mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_60/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"
#将jpress-web-newest.war包放到tomcat根目录下
[root@moban6 ~]# mv jpress-web-newest.war /data/www/www/ROOT/
[root@moban6 ~]# cd /data/www/www/ROOT/
#jar是war包的解压命令(jdk-8u60-linux-x64.tar.gz),java命令,默认linux里没有
[root@moban6 ROOT]# /usr/local/jdk/bin/jar xf jpress-web-newest.war
[root@moban6 ROOT]# ls
jpress-web-newest.war meminfo.jsp META-INF robots.txt static templates WEB-INF
浏览器访问 IP:8081/install,然后需要提供MySQL的一些资料,过程和wordpress一样
Tomcat 安全优化和性能优化
最在用药的优化如下4项,但并不止这四种
- 降权启动
- telnet管理端口保护 (8005修改)
- ajp连接端口保护 (注释8009的那句)
- 禁用管理端 (清空他的web)
降权启动:(同Nginx优化部分的监牢模式):
降权原则就是利用普通用户启动Tomcat
- 将Tomcat程序目录拷贝到普通用户家目录下
- 修改骄傲目录下程序的配置文件(启动端口,检测端口等),并重新指定网页根目录路径
- 递归授权拷贝后的Tomcat程序色属主属组为普通用户
- 用su命令切换为普通用户,启动Tomcat进程
- 此时Tomcat进程的权限为普通用户
- 如果利用/etc/rc.local文件配置普通用户程序的开机启动,嘛呢需要利用su -c 临时切换身份启动。
性能优化
屏蔽NDS查询 enableLookups=“false”
#原配置文件内容
[root@moban6 ~]# vim /usr/local/tomcat8_1/conf/server.xml
69 <Connector port="8081" protocol="HTTP/1.1"
70 connectionTimeout="20000"
71 redirectPort="8443" />
#修改后 70行修改
[root@moban6 ~]# vim /usr/local/tomcat8_1/conf/server.xml
69 <Connector port="8081" protocol="HTTP/1.1"
70 connectionTimeout="20000" enableLookups="false acceptCount="800"
71 redirectPort="8443" />
jvm调优:tomcat最吃内存,如果系统资源有限,那就要进行调优,提高资源使用率
http:/www.cnblogs.com/xingzc/p/5756119.html
#优化catalina.sh初始化脚本,添加代码,必须在脚本的最开始声明位置。
#默认路径:/usr/loacl/tomcat/bin/catalina.sh
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xmsl024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"
#代码说名
server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时,此值应设的大一些
-Xmx:初始堆内存heap最大值,使用的最大内存
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPweSize:设定的醉倒内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512K
+XX:AggressiveHeap 会使得Xms没有意义,这个参数让jvm忽略Xmx参数,疯狂的吃完一个G物理内存,再吃尽一个G的swep
-Xss:每个线程的Stack的大小
-verbose:gc 现实垃圾收集信息
-Xlogggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:UseParNewGC:缩短minor收集的时间
-XX:UseConcMarkSweepGC:缩短major收集的时间