CentOS 7.6 nginx+tomcat集群部署反向代理+负载均衡+动静分离

一、应用场景

Tomcat服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的 功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作 为一个 Servlet 和 JSP 容器,单独运行在后端

二、案例描述

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

三、案例部署

在这里插入图片描述

1、反向代理+负载均衡

环境准备:
nginx:192.168.245.204
tomcat01:192.168.245.205
tomcat02:192.168.245.206

----------------------------tomcat01和tomcat02都进行如下操作---------------------
安装jdk,安装tomcat之前必须先安装jdk

[root@tomcat01 opt]# tar xzvf jdk-8u91-linux-x64.tar.gz -C /usr/local    <----解压tar包

[root@tomcat01 opt]# vim /etc/profile   <----加入以下环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[root@tomcat01 opt]# source /etc/profile   <----使环境变量生效

安装tomcat

[root@tomcat01 opt]# tar xzvf apache-tomcat-8.5.16.tar.gz -C /usr/local/  <---解压tar包

[root@tomcat01 opt]# cd /usr/local/
[root@tomcat01 local]# mv apache-tomcat-8.5.16/ tomcat   <---改一个好记的名字

[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]# mkdir -pv /web/webapp1
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/webapp1"

制作jsp网页,显示信息为Welcome yjs Web

[root@tomcat01 local]# 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("Welcome yjs Web");%>    <-----输出的信息,Tomcat02节点内容设置为Welcome cloud Web'
 </body>
</html>

编辑tomcat的配置文件,将站点改为自定义站点

[root@tomcat01 local]# vim /usr/local/tomcat/conf/server.xml 
<Context docBase="/web/webapp1" path="" reloadable="false">    '//添加此段站点信息'  
        </Context>

在这里插入图片描述
启动tomcat

[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.

真机验证可以访问网页
在这里插入图片描述
在这里插入图片描述
------------------------------------部署nginx代理服务器------------------------------------

安装nginx

[root@nginx ~]# yum -y install gcc gcc-c++ make zlib-devel pcre-devel   <---yum安装依赖包

[root@nginx ~]# useradd -M -s /sbin/nologin nginx   <---创建程序管理用户

[root@nginx opt]# tar xzvf nginx-1.12.0.tar.gz -C /usr/local/    <---解压tar包

[root@nginx opt]# cd /usr/local/nginx-1.12.0/   <---自定义配置
./configure \
--prefix=/usr/local/nginx \    <---指定安装目录
--user=nginx \     <---指定以nginx用户启动nginx
--group=nginx \     <---指定以nginx用户组启动nginx
--with-http_stub_status_module \   <---启用状态统计	
--with-http_gzip_static_module \    <---启用 gzip 静态压缩
--with-http_flv_module   <---启用 flv 模块,提供寻求内存使用基于时间的偏移量文件

[root@nginx nginx-1.12.0]# make && make install    <---编译安装

修改配置文件

[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf

 #gzip  on;
        upstream tomcat_server {        <----设定负载均衡的服务器列表,weight 参数表示权重, 权重越高,被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样
                        server 192.168.245.205:8080 weight=1;
                        server 192.168.245.206:8080 weight=1;
                    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat_server    <----把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡 服务器组上
        }

nginx命令建立软链接方便使用

[root@nginx nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

检查配置文件语法

[root@nginx nginx-1.12.0]# 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

启动nginx

[root@nginx nginx-1.12.0]# nginx

[root@nginx nginx-1.12.0]# netstat -anpt | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      104628/nginx: maste 

真机验证访问nginx的地址实际上是访问了下面两台tomcat的页面,并且轮询显示
在这里插入图片描述
在这里插入图片描述

2、动静分离

配置nginx

[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
 #gzip  on;
        upstream tomcat_server {
                        server 192.168.245.205:8080 weight=1;
                        server 192.168.245.206:8080 weight=1;
                    }
    server {
        listen       80;
        server_name  localhost;
        location ~.*.jsp$ {   <----匹配条件为以.jsp结尾的文件
           proxy_pass http://tomcat_server;  <----代理给后端的2台tomcat服务器处理请求
           proxy_set_header Host $host;  <----proxy_set_header用来设定被代理服务器接收到的header信息
         }
		  #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

配置两台tomcat
站点目录下,新建test目录,把jsp网页放到这个目录下

[root@tomcat01 local]# cd /web/webapp1/
[root@tomcat01 webapp1]# mkdir test
[root@tomcat01 webapp1]# cd test/
[root@tomcat01 test]# vim index.jsp


<!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/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面1</title>   <-----第二台是动态页面2
</head>
<body>
<div>动态页面1</div>   
</body>
</html>

真机验证访问
http://192.168.245.204/
出现静态页面
在这里插入图片描述
访问http://192.168.245.204/test/index.jsp
第一次会出现动态页面1,刷新,第二次出现动态页面2
在这里插入图片描述
在这里插入图片描述

很多时候动态页面的内容也不全都是动态的,比如图片就是静态的,那么我们在jsp页面内插入一个静态图片,观察访问的结果

修改nginx配置文件,当访问以图片格式结尾的文件时,缓存30天,为了提高访问速度不用重复发送请求

 #gzip  on;
        upstream tomcat_server {
                        server 192.168.245.205:8080 weight=1;
                        server 192.168.245.206:8080 weight=1;
                    }
    server {
        listen       80;
        server_name  localhost;
        location ~.*\.(gif|jpg|jpeg|png|bmg|swf|css)$ {
          root html;
          expires 30d;
         }

        location ~.*.jsp$ {
           proxy_pass http://tomcat_server;
           proxy_set_header Host $host;
         }

在nginx的主页站点目录下,也需要新建一个test目录,将静态图片放进去,因为已经实现了动静分离,nginx会把动态页面的请求交给tomcat处理,而静态的访问请求就直接自己处理了不需要发给tomcat处理,所以,静态图片需要放在nginx服务器上

[root@nginx html]# cd /usr/local/nginx/html/

[root@nginx html]# mkdir test
[root@nginx html]# cd test
[root@nginx test]# ls
aca.jpg  blog.png

重启nginx服务

[root@nginx test]# pkill -9 nginx
[root@nginx test]# 
[root@nginx test]# nginx

tomcat01插入图片:

[root@tomcat01 test]# vim index.jsp

<!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/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面1</title>
</head>
<body>
<div>动态页面1</div><br><img src="blog.png">  <---插入图片
</body>
</html>

tomcat02插入图片:

[root@tomcat01 test]# vim index.jsp

<!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/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面2</title>
</head>
<body>
<div>动态页面2</div><br><img src="aca.jpg">  <---插入图片
</body>
</html>

真机验证访问插入了图片的动态页面

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/108425888