这里写目录标题
案例:部署Tomcat
案例分析
案例概述
京北点指科技有限公司发布V3版移联建站管理系统,该项目为Java 语言开发的Web 站点。目前,IBM 的 WebSphere 及 0racle 的 WebLogic 占据了市面上 Java 语言 Web站点的大部分份额。这两种软件以其无与伦比的性能及可靠性等优势被广泛应用于大型互联网公司 的Web 场景中,但是其高昂的价格也使得小型互联网公司对此望而却步
Tomcat 自 5.x版本以来,其性能上已经得到了大幅的提升,再加上其开放性的框架和 可二次开发等特性,已经完全可以用在访问量不是很大的生产环境下。 目前,大多数用于 JSP 技术开发的电子商务网站基本应用了 Tomcat,而且 Tomcat 的Servlet 和JSP 这两种 API 也完全可以适用于 V3 版移联建站管理系统
案例前置知识点
Tomcat 简介
名称由来:Tomcat 最初是由Sun 的软件构架师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun 贡献给 Apache 软件基金会。由于大部分开源项目 0’Rei1ly 都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为 Tomcat(公猫)。而 0’Reilly 出版的介绍 Tomcat 的书籍的封面也被设计成了一个公猫的形象。而 Tomcat 的 Logo 兼吉祥物也被设计成了一只公猫
其实 Tomcat 在开始研发的时候并不叫这个名字,早期 Tomcat 项目的名字叫Catalina,所以当我们安装完 Tomcat 后会发现安装路径下面有很多和 Catalina 有关的目录和文件,而这些文件通常也是我们使用或者配置Tomcat 的重要文件
应用场景
Tomcat 服务器是一个免费的开放源代码的 Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 一般来说,Tomcat 虽然和 Apache 或者 ginx 这些 Web 服务器一样,具有处理 HTML页面的 功能,然而由于其处理静态 HTML的能力远不及 Apache 或者Nginx,所以 Tomcat 通常是作 为一个 Servlet 和 JSP 容器
案例环境
服务器及硬件选购;
测试并安装 tomcat;
部署 tomcat 站点
案例实施
实施准备
关闭 firewalld 防火墙
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# setenforce 0
在安装Tomcat之前必须先安装JDK
JDK 的全称是 Java Development Kit,是 Sun 公司免费提供的 Java 语言的软件开发工具包,其中包含 Java 虚拟机(JVM)。编写好的Java 源程序经过编译可形成Java 字节码,只要安装了 JDK,就可以利用 JVM 解释这些字节码文 件,从而保证了Java 的跨平台性
在平台兼容性方面,JDK 作为解释字节码文件并据此调用操作系统API 实现对应功Java 虚拟机,与操作系统类型和平台位数密切相关,因此存在不同类型的版本,而Tomcat 也具有上述特征,默认情况下JDK 已经安装,所以需要预先下载 Tomcat,本章中所使用的 Tomcat 软件的源码包为 apache-tomcat-9.0.8.tar.gz
查看JDK是否安装
运行 java -version 命令査看 Java 是否安装。如果没有安装需要自行下载安装
安装配置 Tomcat
Tomcat 的安装和配置步骤如下:
解压 apache-tomcat-9.0.8.tar.gz 包
[root@bogon ~]# tar xf apache-tomcat-9.0.8.tar.gz
解压后生成 apache-tomcat-9.0.8文件夹,将该文件夹移动到/usr/local/下并 改名为 tomcat9
[root@bogon ~]# mv apache-tomcat-9.0.8/ /usr/local/tomcat9
启动 tomcat
[root@bogon tomcat9]# /usr/local/tomcat9/bin/startup.sh
Tomcat 默认运行在 8080 端口,运行 netstat 命令査看 8080 端口监听的信息
[root@bogon bin]# netstat -anpt | grep java
tcp6 0 0 :::8009 :::* LISTEN 2235/java
tcp6 0 0 :::8080 :::* LISTEN 2235/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2235/java
打开浏览器访问测试:http://172.16.16.172:8080/
Tomcat 配置相关说明
Tomcat 的主目录为/usr/local/tomcat9/
主要目录说明
—bin/:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件
—conf/:存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和web.xml.
—lib/:存放 Tomcat 运行需要的库文件(JARS)
—logs:存放 Tomcat 执行时的 LOG 文件
—webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例)
—work:存放 JSP 编译后产生的 class 文件
配置文件说明
执行“1l conf/ ”命令,便可看到配置文件清单
- catalina.policy:权限控制配置文件
- catalina.properties:Tomcat 属性配置文件
- context.xml:上下文配置文件
- logging.properties:日志 log 相关配置文件
- server.xml:主配置文件
- tomcat-users.xml:manager-gui管理用户配置文件(Tomcat安装后manager-gui 的管理界面,通过配置该文件可以开启访问)提供一个
- web.xml:Tomcat 的servlet、servlet-mapping、filter、MIME 等相关配置
Tomcat 主配置文件说明
server.xml 为 Tomcat 的主要配置文件,通过配置该文件,可以修改 Tomcat 的启动端 口、网站目录、虚拟主机、开启 https 等重要功能
整个server.xml 由以下结构构成:、、、、、</Context〉、</Host〉、、和以下是默认安装后 server.xml文件的部分内容,其中 内的内容是注释信息,黑色斜体部分是需要注意和需要经常更改的部分
TomcatServer的组成部分说明
Tomcat Server 由Server、Service、Connector、Engine、Host 和 Context 组成
(1)ServerServer 元素代表了整个 Catalina 的 servlet 容器
2)ServiceService 是这样一个集合:它由一个或者多个 Connector,以及一个 Engine(负责处理 所有 Connector 所获得的客户请求)组成
(3)Connector一个 Connector 在某个指定端口上侦听客户请求,并将获得的请求交给 Engine 来处理,从 Engine 处获得回应并返回客户
Tomcat 有两个典型的 Connector,一个直接侦听来自 browser 的 http 请求,一个侦听来自其他 WebServer 的请求。
Coyote Http/1.1 Connector 在端囗 8080 处侦听来自客户 browser 的 http 请求
Coyote JK2 Connector 在端口8009 处侦听来自其他 WebServer(Apache)的servlet/jsp 代理请求
(4)Engine
Engine 下可以配置多个虚拟主机 Virtual Host,每个虚拟主机都有一个域名。当 Engine 获得一个请求时,它把该请求匹配到某个 Host 上,然后把该请求交给该 Host来处理
Engine 有一个默认虚拟主机,当请求无法匹配到任何一个 Host 上的时候,将交给该默认 Host 来处理
(5)Host
Host 代表一个 Virtual Host,即虚拟主机,每个虚拟主机和某个网络域名 DomainName 相匹配
每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个 Web App 对应于-个Context,有一个Context path
当 Host 获得一个请求时,将把该请求匹配到某个Context 上,然后把该请求交给该 Context 来处理,匹配的方法是“最长匹配”,所以一个 path==""的 Context 将成为该 Host 的默认 Context
所有无法和其他 Context 的路径名匹配的请求都将最终和该默认 Context 匹配
(6)Context
一个 Context 对应于一个 Web Application,一个 Web Application 由一个或者多个 Servlet 组成
建立Java的Web站点
执行下面步骤可以建立Java 的 Web 站点
在根目录下建立一个web目录,并在里面建立一个webapp1 目录,用于存放网站文 件
在webapp1 目录下建立一个 index.jsp 的测试页面
修改Tomcat的server.xml 文件
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webappl,在 host 段增加context 段
关闭 Tomcat,再重新启动
确认 Web 站点
通过浏览器访问 http://192.168.10.101:8080/,出现如图 5.3 所示的页面,说明该Tomcat 站点已经配置成功,并且已经能够运行 JSP了
案例:Nginx+Tomcat 负载均衡、动静分离群集
案例概述
通常情况下,一台Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构
Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 50000 个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU等系统资源消耗非常低。目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力
Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大 多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚
案例环境
安装 nginx、tomcat
nginx、tomcat 配置
编写动静分离页面
案例实施
Tomcat2 server 配置
Tomcat2 server 配置方法基本同 Tomcatl,其中包括:
(1)关闭防火墙
(2)确认是否安装JDK,JAVA 版本与 Tomcatl server 保持一致
(3)安装配置 Tomcat,版本与 Tomcatl server 保持一致
(4)创建/web/webapp1 目录,修改 Tomcat 配置文件 server.xml,将网站文件目录更改 到/web/webapp1/路径下
(5)在/web/webapp1/路径下建立 index.jsp,为了区别将测试页面 index.jsp 的内容更改如下
[root@bogon ~]# vim /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态 2,http://www.test.com") ;%>
</body>
<body>
<div>动态 2</div><br><img src="logo.jpg">
</body>
</html>
(6)启动 Tomcat,浏览器访问 Tomcat2 server,测试 http://192.168.10.103:8080/
Nginx 服务器配置
在 Nginx 服务器 192.168.10.103 上安装 Nginx,反向代理到两个 Tomcat 站点,并实现负载均衡
关闭防火墙
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# setenforce 0
安装相关软件包
[root@bogon ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar
配置nginx.conf
[root@bogon ~]# vim /usr/local/nginx/conf/nginx.conf
[root@bogon ~]# mkdir /usr/local/nginx/html/img
[root@bogon ~]# cp /root/logo.jpg /usr/local/nginx/html/img/
[root@bogon ~]# cp /root/logo.jpg /usr/local/nginx/html/img/
启动服务
[root@bogon ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
查看进程
[root@bogon ~]# ps aux | grep nginx
root 16614 0.0 0.1 9800 3720 ? Ss 4月22 0:00 nginx: master process /usr/local/sbin/nginx
nginx 16666 0.0 0.1 11544 4628 ? S 4月22 0:00 nginx: worker process
root 17235 0.0 0.2 21988 8056 pts/0 S+ 00:07 0:00 grep --color=auto nginx
查看端口及PID进程号
[root@bogon ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16614/nginx: master
查看日志
[root@bogon ~]# nginx -s stop
[root@bogon ~]# nginx
[root@bogon ~]# cd /usr/local/nginx/
[root@bogon nginx]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@bogon nginx]# cd logs/
[root@bogon logs]# ls
access.log error.log nginx.pid
[root@bogon logs]# cat access.log
192.168.10.101 - - [22/Apr/2025:16:45:31 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/8.4.0"
192.168.10.101 - - [22/Apr/2025:16:47:47 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/8.4.0"
192.168.10.1 - - [23/Apr/2025:00:40:58 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:40:58 +0800] "GET /favicon.ico HTTP/1.1" 404 548 "http://192.168.10.101/index.jsp" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:41:02 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:41:02 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:41:03 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:41:03 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:41:03 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
192.168.10.1 - - [23/Apr/2025:00:41:15 +0800] "GET /index.jsp HTTP/1.1" 404 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"