nginx+tomcat负载均衡与动静分离


通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,
不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 50000 个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU 等系统资源消耗非常低。
目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,来提升整 个站点的
负载并发能力。
Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大
多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚。

实验环境:

3台服务器
Nginx 1台
tomcat 2台

tomcat服务器

1.安装前准备

systemctl stop firewalld								#关闭防火墙
setenforce 0												#关闭核心防护
tar xf jdk-8u144-linux-x64.tar.gz                	# 解压安装包
cp -rv jdk1.8.0_144/ /usr/local/java          	#复制文件到/usr/local/java  
vi /etc/profile                                             	#编辑环境变量
export JAVA_HOME=/usr/local/java			#java工作目录
export JRE_HOME=/usr/local/java/jre		#java虚拟机
export PATH=$PATH:/usr/local/java/bin		#添加环境变量
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib	#类
source /etc/profile										#####让刚才编辑的环境变量生效
java -version												#####检查java版本

2.安装配置Tomcat

tar xf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16/ /usr/local/tomcat8
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup                        #####创建软连接tomcatup      
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown               #####创建软连接tomcatdown  
tomcatup														#启动tomcat
netstat -anpt | grep 8080								#检测是否启动,8080端口是否工作正常

3.建立 Java 的 Web 站点

mkdir -pv /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.51xit.com");%>
	</body>
	<body>
 		<div>静态页面的图片 1</div><br><img src="logo.jpg">
	</body>
</html>

修改 Tomcat 的 server.xml 配置文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,
在 host 段增加 context 段

[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
	unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>

#docBase:web 应用的文档基准目录
#reloadable 设置监视"类"是否变化
#path="" 设置默认"类"

4.关闭 Tomcat,再重新启动

shutdown.sh #关闭
startup.sh #启动

Tomcat2服务器的配置

和tomcat1的配置一样,只需要在web页面稍微修改一下以便区分即可

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("动态页面 2,http://www.52xit.com");%>
	</body>
	<body>
 		<div>静态页面的图片2</div><br><img src="logo.jpg">
	</body>
</html>

Nginx 服务器配置

在 Nginx 服务器上安装 Nginx,反向代理到两个 Tomcat 站点,并实现负载均衡

1.安装前准备

systemctl stop firewalld								#关闭防火墙
setenforce 0												#关闭核心防护
yum -y install pcre-devel zlib-devel openssl-devel gcc-c++

2.安装nginx

groupadd www
useradd -g www www -s /bin/false
tar xzvf nginx-1.15.9.tar.gz
cd nginx-1.15.9/
./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module

//–user=,–group= 指定运行的用户和组
//–with-file-aio 启用文件修改支持
//–with-http_stub_status_module 启用状态统计
//–with-http_gzip_static_module 启用 gzip 静态压缩
//–with-http_flv_module 启用 flv 模块,提供寻求内存使用基于时间的偏移量文件
//–with-http_ssl_module 启用 SSL 模块

make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t									#检查配置文件
yum -y install psmisc											#安装killall命令
killall -1 nginx                                                     ####安全重启
killall -3 nginx                                                     ###停止服务

nginx																	#启动服务
netstat -anpt | grep nginx									#确认服务启动成功

3.添加 Nginx 系统服务

[root@localhost ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx                                                 ####描述
After=network.target                                            ####描述服务类别
[Service]
Type=forking                                                          ####后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid                ####PID 文件位置
ExecStart=/usr/local/nginx/sbin/nginx                  ####启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID         ####根据 PID 重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID           ####根据 PID 终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl enable nginx.service
systemctl start nginx.service
systemctl stop nginx.service
systemctl reload nginx.service
systemctl restart nginx.service
systemctl status nginx.service

4.配置 nginx.conf

http {…} 中加入以下代码,设定负载均衡的服务器列表,weight 参数表示权重, 权重越高,
被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样。

vim /usr/local/nginx/conf/nginx.conf
upstream tomcat_server {
        server 192.168.100.11:8080 weight=1;			#tomcat1,权重1
        server 192.168.100.13:8080 weight=1;			#tomcat2,权重1
        }

5.编辑 Nginx 静态页面文件

vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<title>静态页面</title>
<style>
	body {
		width: 35em;
		margin: 0 auto;
		font-family: Tahoma, Verdana, Arial, sans-serif;
	}
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>

6.添加动静分离规则

在 http {…} - server{…}中加入 location ~ .*.jsp${…}动态请求条件规则以及静态图片请求规则。

location ~ .*.jsp$ {		###动态页面正则
	proxy_set_header HOST $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header Client-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_pass http://tomcat_server;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { 		###静态图片正则
	root /usr/local/nginx/html/img;
	expires 30d;
	}

location / {
	root html;
	index index.html index.htm;
	}

7.启动服务

nginx -t										#测试 Nginx 配置文件是否正确
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf		#启动 Nginx 服务
ps aux | grep nginx						#查看 Nginx 服务进程

测试

测试静态页面效果 打开浏览器访问 http://192.168.100.11/,可以看到访问到 nginx 静态页面
测试负载均衡效果 打开浏览器访问 http://192.168.100.13/index.jsp。 不断刷新浏览器测试,
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 test1 的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 test2 的测试页面,
示。就说明负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值