文章目录
一、为什么用nginx和tomcat搭建群集?
- 传统模型下,一个项目部署在一台tomcat上,这个时候,假如 tomcat
因为服务器资源不够,突然挂机了,出现单点故障,那么整个项目就无法使用,给客户造成的损失可想而知!! - Tomcat 不能单独应用于生产环境下,我们需要一套更可靠的解决方案来完善web站点架构。
Nginx 能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU等系统资源消耗非常低。
目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理以及负载均衡器,来提升整个站点的负载并发能力。
我们可以部署 Nginx + tomcat 服务群集,就可以避免单台服务如果挂机,依然能保证服务正常使用。
当我们把项目 war 包部署到三台服务器上时,即使服务器A、服务器B都挂了,依然能够通过服务器C访问项目资源!
二、部署环境
名称 | 角色 | 地址 |
---|---|---|
centos7-1 | nginx | 192.168.158.30 |
centos7-2 | Tomcat01 | 192.168.158.10 |
centos7-3 | Tomcat02 | 192.168.158.20 |
win10 | 客户端 | 不重要 |
目的:
当访问服务器时,静态页面由nginx服务器处理,动态页面由tomcat处理
2.1:配置nginx
#关闭防火墙
[root@naginx ~]# systemctl stop firewalld.service
[root@naginx ~]# setenforce 0
#安装依赖环境包
yum -y install \
gcc \
gcc-c++ \
pcre-devel \
zlib-devel
#解压
[root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz
#编译及安装
cd nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make
make install
#创建管理用户
useradd -M -s /sbin/nologin nginx
#路径优化便于优化
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#开启服务
[root@nginx nginx-1.12.2]# nginx
#语法检查
nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- 使用service控制管理
[root@nginx nginx-1.12.2]# cd /etc/init.d/
[root@nginx init.d]# vim nginx
//编写以下内容
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#增加执行权限
[root@localhost init.d]# chmod +x nginx
[root@localhost init.d]# chkconfig --add nginx
[root@localhost init.d]# chkconfig --level 35 nginx on
[root@localhost init.d]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22379/nginx: master
2.2:节点服务器部署Tomcat
[root@tomcat01 ~]# iptables -F
[root@tomcat01 ~]# setenforce 0
#解压
[root@tomcat01 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
#修改全局配置文件 设置环境变量
vim /etc/profile
#末行添加
//
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
使环境变量生效
[root@tomcat01 ~]# source /etc/profile
#安装Tomcat软件本体
[root@tomcat01 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/
#重命名为tomcat
[root@tomcat01 ~]# cd /usr/local/
[root@tomcat01 local]# mv apache-tomcat-8.5.16/ tomcat
启动tomcat
/usr/local/tomcat/bin
shutdown.s:控制服务关闭
startup.sh:控制服务开启
#设置服务开启关闭的超链接 便于管理
[root@tomcat01 local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
[root@tomcat01 local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
#启动程序
[root@tomcat01 local]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
#查看端口
[root@tomcat01 local]# netstat -ntap | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 19537/java
2.3:配置动静分离
基于动态分离
我们知道对于Nginx而言,其对静态资源的支持是非常友好的,而Tomcat对于Java的动态web页面的支持非常好。所以需要实现动态分离就是将静态请求给予nginx服务器运行,Tomcat负责处理类似jsp文件的动态请求。
本次案例使用nginx服务器和一台Tomcat服务器做动态分离。最终将结合静态图片让nginx负责处理,而使用Tomcat处理动态页面。
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
#access_log logs/host.access.log main;
//添加
location ~.*.jsp$ { #匹配的jsp页面跳转代理服务器
proxy_pass http://192.168.158.30:8080;
proxy_set_header Host $host;
}
#检查语法
[root@nginx init.d]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
- 创建静态页面
[root@nginx init.d]# vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面!</h1>
<p>这个是静态页面</p>
</body>
</html>
----------------------------------------------------------------------------------------
#开启服务
[root@nginx init.d]# service nginx stop
[root@nginx init.d]# service nginx start
- toamca节点服务器配置动态页面
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ htm14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content"text/thml; charaset=YTF-8">
<title>动态小页面</title>
</head>
<body>
<div>动态小页面</div>
</body>
</html>
#启动服务
[root@tomcat01 test]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
2.4:Nginx处理静态图片,Tomcat处理动态页面
2.41:Tomcat服务操作
在Tomcat上的动态页面插入一张图片
//在Tomcat服务器上声明图片的位置
vim /usr/local/tomcat/webapps/test/index.jsp
<body>
<img src="game.jpg"/>
#添加页面图片,这个图片在nginx中存放,但是在tomcat里声明
</body>
//如果图片过大,可以通过设置参数改变图片大小,例子如下:
<img src="game.jpg" height="150px" width="230px"/>
2.5:编辑Nginx配置文件
#access_log logs/host.access.log main;
//下面插入内容
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|scc)$ { //扩展名结尾
root html; //在自己站点找到相应资源
expires 30d; //客户浏览器缓存30天
}Nginx创建站点目录并并上传图片
2.6:Nginx创建站点目录
//在nginx服务器上,存放图片,而且图片的目录名称要和tomcat中的java项目名称相同
vim /usr/local/nginx/conf/nginx.conf
在server{}段里添加
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root html;
expires 30d;
}
(Tomcat指路径,nginx放图片)
注意:目录名称需要和 java项目(webapps)名称相同
mkdir /usr/local/nginx/html/test/
在/usr/local/nginx/html/test/目录下放一张图片
service nginx stop
service nginx start
注意:目录名称需要和java项目名称相同
2.7:客户机访问
http://192.168.158.30/test/index.jsp
文字部分为tomcat提供资源 图片部分是为静态资源由nginx服务器提供