Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
Tomcat和Nginx、Apache(httpd)、Web服务器一样,具有处理HTML页面的功能不过Tomcat处理静态HTML的能力不如Nginx/Apache服务器。
一个tomcat默认并发是200(官方),可以修改,但实际用的时候也就200并发左右。
使用方案:
建议使用Nginx和Tomcat配合,Nginx处理静态,Tomcat处理动态程序 方案三中后端Tomcat可以运行在单独的主机,也可以是同一台主机上的多实例
Tomcat官网:
Tomcat好帮手---JDK
JDK是 Java 语言的软件开发工具包,JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
JDK下载面页:
Java Downloads | Oracle
安装时候选择tomcat软件版本要与程序开发使用的版本一致。jdk版本要进行与tomcat保持一致。
systemctl stop firewalld && setenforce 0
上传jdk1.8到服务器。安装jdk
tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk1.8.0_191 /usr/local/jdk
echo "export PATH=/usr/local/jdk/bin:$PATH" >> /etc/profile
source /etc/profile
创建一个目录用于存放tomcat
mkdir /data/application -p
cd
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.49/bin/apache-tomcat-8.5.49.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.49/bin/apache-tomcat-8.5.49.tar.gz --no-check-certificate
tar xzf apache-tomcat-8.5.49.tar.gz -C /data/application/
cd /data/application/
mv apache-tomcat-8.5.49/ tomcat
设置环境变量
echo "export PATH=/data/application/tomcat/bin:$PATH" >> /etc/profile
source /etc/profile
我们已经设置了环境变量所以直接 : startup.sh 启动 shutdown.sh 关闭
但是如果布置多个实例,就要去对应的tomcat包里面启动和关闭
注意:tomcat未启动的情况下使用shutdown脚本,会有大量的输出信息。
端口:
8005:这个端口负责监听关闭Tomcat的请求 shutdown:向以上端口发送的关闭服务器的命令字符串。
8009: 与其他http服务通信接口。(也可以没有)
8080: 建立http也就是客户端访问连接用。可以修改
查看日志:
tail -f /data/application/tomcat/logs/catalina.out
扩展:解决Tomcat启动慢的方法
Tomcat启动慢主要原因是生成随机数的时候卡住了,导致tomcat启动不了。
yum install rng-tools # 安装rngd服务(熵服务,增大熵池)
systemctl start rngd # 启动服务
vim /usr/local/tomcat/conf/tomcat-users.xml
添加:( #一定要包含在这个标签"里面")
vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
修改为如图所示:
主配置文件 server.xml
Connector主要参数说明
port:指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求。
protocol:连接器使用的协议,支持HTTP和AJP。AJP(Apache Jserv Protocol)专用于tomcat与apache建立通信的.
redirectPort:指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
maxThreads:接收最大请求的并发数
connectionTimeout 指定超时的时间数(以毫秒为单位)
host:表示一个虚拟主机
name:指定主机名
appBase:应用程序基本目录,即存放应用程序的目录.一般为appBase="webapps",相对于CATALINA_HOME而言的,也可以写绝对路径。
unpackWARs:如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
autoDeploy:在tomcat启动时,是否自动部署
上线的代码有两种方式:
第一种方式是直接将程序目录放在webapps目录下面,这种方式大家已经明白了,就不多说了。(放在webapps目录下的ROOT目录里面,浏览器访问ip:8080后面不需要指定目录,否则访问需要指定,例如:ip:8080/jenkins)
第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面。(这种会自动解压缩)
wget http://updates.jenkins-ci.org/download/war/2.129/jenkins.war
cd /data/application/tomcat #进入tomcat目录
cp -r webapps/ /opt/ #将原来的发布网站目录备份
cd webapps/
rm -rf * #清空发布网站里面的内容
cp /root/jenkins.war . #将war包拷贝到当前目录
关闭服务,手动解压 unzip jenkins.war 完了在启动服务
#这里配置上传大于50M的文件
/usr/local/tomcat/webapps/manager/WEB-INF/web.xml
修改默认发布目录:
mkdir /data/application/webapp #创建发布目录
vim /data/application/tomcat/conf/server.xml
将原来的:
改为:
然后重启服务(先关闭,再启动),把war包拷贝到新的发布目录,它会自动解压缩
多实例(多进程):同一个程序启动多次,分为两种情况:
第一种:一台机器跑多个站点;
第二种:一个机器跑一个站点多个实例,配合负载均衡
cd /data/application/
cp -r tomcat/ tomcat_2
#修改端口,以启动多实例。多实例之间端口不能一致
sed -i 's#8005#8012#;s#8080#8082#' tomcat_2/conf/server.xml
echo 8081 >> tomcat/webapps/ROOT/index.jsp
echo 8082 >> tomcat_2/webapps/ROOT/index.jsp
去各自tomcat里面启动
下载一个nginx
upstream testweb {
server 192.168.50.114:8081 weight=1 max_fails=1 fail_timeout=2s;
server 192.168.50.114:8082 weight=1 max_fails=1 fail_timeout=2s;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/proxy.access.log main;
location / {
proxy_pass http://testweb;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
配置完检查语法,然后开启,直接浏览器访问ip,无需指定端口