这里写目录标题
Tomcat概述
简介:
1.最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发
2.安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件
Tomcat重要目录:
bin:存放启动和关闭Tomcat脚本)。
conf:存放Tomcat不同的配置文件。
doc:存放Tomcat文档。
lib:存放Tomcat运行需要的库文件。
logs:存放Tomcat执行时的LOG文件。
src:存放Tomcat的源代码。
webapps:Tomcat的主要Web发布目录。
work:存放jsp编译后产生的class文件。
Nginx应用
1.Nginx是一款非常优秀的HTTP服务器软件
- 支持高达50000个并发连接数的响应,响应连接数的范围在
30000~50000之间 - 拥有强大的静态资源处理能力
- 运行稳定
- 内存、CPU等系统资源消耗非常低
2.目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力。
Nginx负载均衡实现原理
Nginx实现负载均衡是通过反向代理实现;
反向代理原理
Nginx配置反向代理的主要参数
upstream 服务池名 { }
配置后端服务器池,以提供响应数据
proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理
动静分离概述
动静分离是将网站的静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用的访问。
静态资源的部署
1.静态资源部署在Nginx,将静态资源部署在Nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求,全部去请求nginx服务器,达到动静分离的目标。
2.静态资源部署在CDN上,将项目中的JavaScript,CSS以及img文件都存放在CDN服务器上,将HTML文件一起存放到CDN上之后,可以将静态资源统一放置在一种服务器上,便于前端进行维护;而且用户在访问静态资源时,可以很好利用CDN的优点。
3.后端API提供数据,后端应用提供API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。目前应用主要采用Java平台开发,因此应用服务器主要是Tomcat服务器,现在也开始有部分应用采用node进行开发,应用服务器也开始使用node服务器。
4.前后端域名,动静分离因为静态资源和应用服务分别部署在不同的服务器上,因此会面临域名策略的选择。采用相同域名下,用户请求API时可以避免跨域所带来的问题,相对开发更为快速,工作量也相对小一些。前后端采用不同域名时,需要前后端开发时兼容跨域请求的情况,开发量相对上一种会稍多一些。解决跨域方式最常用的方式就是采用JSONP,还有一种解决方式使用CORS(HTTP访问控制)允许某些域名下的跨域请求。
动静分离实现的优缺点
优点:
API接口服务化;前后端开发并行;减轻后端服务器的压力,提高静态资源访问速度。
缺点:
不利于网站SEO(搜索引擎优化);开发量变大;在业务高速发展时需要慎重考虑。
动静分离的适用场景
- 静态文件访问量大,服务器负载高,I/O问题导致用户访问卡顿。
- 静态文件数量大,服务器存储空间不够。
- 静态文件用户访问量大,且分布在各地。
- 移动更新包在某个时间段需要高速下载,且并发下载量高。
Nginx动静分离实现原理
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端。
Nginx静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力。
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次。
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M。
- Nginx处理静态资源的能力是Tomcat处理的6倍。
Nginx配置负载均衡、动静分离
在Nginx服务器上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡。
- 关闭Firewalld防火墙。
- 安装Nginx依赖软件包。
- 解压并编译安装Nginx。
- 配置nginx.conf,添加location静态页面处理及添加upstream配置段与proxy_pass。
- 检测配置文件与启动Nginx。
- 测试负载均衡、动静分离效果。
Nginx与Tomcat实现动静分离具体步骤
1.由于Tomcat本身处理静态效率不高,还会带来资源消耗,因此使用动静分离,将静态请求交由Nginx处理,动态请求交由Tomcat处理。
2.Nginx根据客户端请求的url来判断请求的是否是静态资源,如果请求的url包含jpg、png,则由Nginx处理;如果请求的url是.php或者.jsp等,则被认为是动态的,将转发tomcat处理。即Nginx通过url来区分请求的类型,并且转发给不同的服务端。
实验环境:
Nginx服务器:
IP地址:192.168.100.11/24(调度器1)
Tomcat服务器:
IP地址:192.168.100.2/24(tomcat1)
IP地址:192.168.100.3/24(tomcat2)
NFS存储服务器:
IP地址:192.168.100.4/24
Client客户端:
IP地址:192.168.100.5/24
NFS存储服务器:IP地址:192.168.100.4/24
mkdir web1
mkdir web2
vi /web1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat1</title>
</head>
<body>
<% out.println("this is tomcat1 server");%>
<div>动态页面</div><br/><img src="a.jpg" />
</body>
</html>
vi /web2/index.jsp
<<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat2</title>
</head>
<body>
<% out.println("this is tomcat2 server");%>
<div>动态页面</div><br/><img src="b.jpg" />
</body>
</html>
vi /etc/exports
/web1 192.168.100.2/32(ro)
/web2 192.168.100.3/32(ro)
showmount -e
Export list for nfs:
/web2 192.168.100.3/32
/web1 192.168.100.2/32
systemctl restart nfs
systemctl restart rpcbind
Tomcat服务器:
IP地址:192.168.100.2/24(tomcat1)
IP地址:192.168.100.3/24(tomcat2)
配置java环境
tar zxvf jdk-8u91-linux-x64.tar.gz
tar zxvf apache-tomcat-8.5.16.tar.gz
mv jdk1.8.0_91/ /usr/local/java
vi /etc/profile
....
export JAVA_HOME=/usr/local/java '//设置JAVA根目录设为全局变量'
export JAVA_JRE=/usr/local/java/jre
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_JRK/bin:$JAVA_JRE/lib
'//环境变量,在PATH环境变量中添加JAVA根目录下的bin/子目录,jre/子目录'
source /etc/profile '脚本导入到环境变量,使其生效'
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre
java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
//配置tomcat环境
mv apache-tomcat-8.5.16 /usr/local/tomcat8
mkdir /webapp1
cd /webapp1/ '挂入图片 且先放人图片后挂入'
mount 192.168.100.4:/web1 /webapp1/
ll
-rw-r--r--. 1 root root 12855 12月 14 18:57 a.jpg
df -h
192.168.100.4:/web1 51G 5.5G 46G 11% /webapp1 'nfs的共享目录挂载成功'
配置tomcat环境修改主配置文件
vi /usr/local/tomcat8/conf/server.xml '查找到Host name ,添加以下配置'
<Context docBase="/webapp1" path="" reloadable="false">
</Context>
'//docBase:web应用的文档基准目录'
'//path="": 指定访问路径URI(虚拟目录名),访问url路径下是否跟内容'
'//reloadable:本项为true时,当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务'
优化服务启动关闭
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup '优化开启'
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown '优化关闭'
tomcatup '服务启动'
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
Tomcat started '开启了'
注:tomcat2 上的配置与 tomcat1 上几乎相同 一样配置一下及好。 就挂载nfs是/web2文件。
tomcat访问NFS共享目录效果: 注:挂载nfs共享目录到/webapp1里面 覆盖了a.jsp 图片404找不到。
Nginx服务器:
IP地址:192.168.100.11/24(调度器1)
安装Nginx依赖包
tar zxvf nginx-1.13.7.tar.gz
yum -y install gcc gcc-c++ make pcre-devel zlib-devel //pcre-devel:正则表达式库 //zlib-devel:函数库
useradd -M -s /sbin/nologin nginx '创建不可登录,不带宿主的用户'
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
创建命令链接
cd nginx-1.12.2/
ln -s /usr/local/nginx/conf/nginx.conf /etc/ '优化'
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
配置upstream服务池
vi /etc/nginx.conf '优化后'
...//添加以下配置,upstream服务池 如#gzip on;下面
upstream tomcat_server {
server 192.168.100.2:8080 weight=1;
server 192.168.100.3:8080 weight=1;
}
...
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
}
启动服务
nginx -t '检查语法问题'
cd /usr/local/nginx/html/ '导入图片 a.jpg b.jpg,保证静态资源的调度'
nginx '开启服务' killall -9 nginx
netstat -anpt | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 27576/nginx: master
/usr/local/nginx/html/放入了两种图片
访问测试192.168.100.11效果:
访问测试http://192.168.100.11/index.jsp效果: 刷新可以2个页面切换。
客户机虚拟机访问http://192.168.100.11/index.jsp