前言
Nginx 是一个非常强大的静态 web 服务,Tomcat 处理静态请求效率不高,而一般网站大多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在性能与稳定性的权衡下,使用 Nginx+Tomcat 搭配很常见
101 nginx服务器
102 第一台tomcat服务器
103 第二台tomcat服务器
一、安装tomcat
tomcat是使用Java编写的,擅长处理jsp网页的动态请求,处理静态请求速度较慢并且处理的并发请求数也没nginx多
所以在nginx+tomcat里主要分担动态请求
两台tomcat做负载均衡
1.安装Java环境
https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
rpm -ivh jdk-17_linux-x64_bin.rpm
2.安装tomcat
本例使用 apache-tomcat-9.0.8.tar.gz
tar zxf apache-tomcat-9.0.8.tar.gz
mv apache-tomcat-9.0.8 /usr/local/tomcat8
修改配置文件,添加虚拟主机
vim /usr/local/tomcat8/conf/server.conf
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
mkdir -p /web/webapp1
vim /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body> <body>
<div>静态页面的图片 1</div><br><img src="logo.jpg">
</body>
</html>
第二台tomcat一样
为了方便确认是否实现负载均衡可以改变网页的内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body> <body>
<div>静态页面的图片 2</div><br><img src="logo.jpg">
</body>
</html>
二、nginx配置
添加两台tomcat的地址
HTTP {
......略
upstream tomcat_server {
server 192.168.10.102:8080 weight=1;
server 192.168.10.103:8080 weight=1;
}
...... 略
}
在server字段里加入反向代理
server{
location ~ .*.jsp$ {
proxy_pass http://tomcat_server;
}
#匹配动态网页资源交给tomcat服务器池
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
#匹配静态网页资源留在本地处理
}
匹配动态请求并反向代理,交给之前定义的tomcat服务器池nginx默认使用了轮询算法交给tomcat服务器
三,验证
访问nginx服务的动态网页
curl -s 192.168.10.101/index.jsp
验证负载均衡成功
logo.jpg会请求nginx本地的/usr/local/nginx/html/img里的logo.jpg
总结
upstream添加服务器池
通过location匹配
匹配动态网页的请求添加反向代理,指定服务器池实现负载均衡
匹配静态资源留在本地
实现动静分离