nginx+tomcat(反向代理+负载均衡+动静分离)

1. 案例描述

通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
以LNMP为例,一个企业内部最基础的架构组成需要一个处理静态web服务的页面,一个动态web服务的页面和数据库而我们实现了在Linux平台上,实现了Nginx + PHP实现动静分离,而实际生产中往往一台nginx需要"对应"多个动态处理的服务(及tomcat),所以如何将前端接收到的动态请求转交给后端多个tomcat处理。

2. 配置前准备

2.1 配置环境:

一台centos7作为nginx服务器,IP地址:192.168.152.129
一台centos7作为Tomcat服务器,IP地址:192.168.152.128
一台centos7作为Tomcat服务器,IP地址:192.168.152.130
因为之前安装过,所以这里免去了安装,直接进入配置,配置之前先测试一下都能访问服务:

2.2 环境测试:

nginx-5服务器:

tomcat-6服务器:

tomcat-4服务器:

3. 动静分离配置

3.1 配置tomcat服务器

comcat 1服务器:

[root@server ~]# mkdir -p /usr/local/apache-tomcat-9.0.16/webapps/test
[root@server ~]# vim /usr/local/apache-tomcat-9.0.16/webapps/test/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>
</html>

[root@server ~]# vim /usr/local/apache-tomcat-9.0.16/conf/server.xml

159       <Host name="localhost"  appBase="webapps"
160             unpackWARs="true" autoDeploy="true">
#加入以下内容,给他一个指向的路径
161       <Context docBase="/usr/local/apache-tomcat-9.0.16/webapps/test" path="" reloadable="true"/>

172         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
173                prefix="localhost_access_log" suffix=".txt"
174                pattern="%{X-Real-IP}i %l %u %t &quot;%r&quot; %s %b"/>


[root@server ~]# shutdown.sh
[root@server ~]# startup.sh

comcat 2服务器:

[root@localhost ~]# mkdir -p /usr/local/apache-tomcat-9.0.16/webapps/test
[root@localhost ~]# vim /usr/local/apache-tomcat-9.0.16/webapps/test/index.jsp

<%@ 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>
</html>


[root@localhost ~]# vim /usr/local/apache-tomcat-9.0.16/conf/server.xml

148       <Host name="localhost"  appBase="webapps"
149             unpackWARs="true" autoDeploy="true">
150       <Context docBase="/usr/local/apache-tomcat-9.0.16/webapps/test" path="" reloadable ="true"/>

161         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
162                prefix="localhost_access_log" suffix=".txt"
163                pattern="%{X-Real-IP}i %l %u %t &quot;%r&quot; %s %b"/>

[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh

3.2 配置nginx服务器

#配置静态网页
[root@client ~]# echo '<html><body><h1>this is 静态页面</h1></body></html>' > /usr/local/nginx/html/index.html

#配置server配置文件:
[root@client ~]# vim /usr/local/nginx/conf/nginx.conf

37     #gzip  on;
 38      upstream tomcat_server {
 39      server 192.168.152.128:8080 weight=1;
 40      server 192.168.152.130:8080 weight=1;
 41 }
 42     server {
 43         listen       80;
 44         server_name  localhost;
 45         #charset koi8-r;
 46         #access_log  logs/host.access.log  main;
 47 
 48         location ~ .*\.jsp$ {
 49              proxy_pass http://tomcat_server;
 50              proxy_set_header HOST $host;    
 51              proxy_set_header X-Real-IP $remote_addr;
 52              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 #获取客户真实IP,在配置文件中输入以下内容,用于检测到客户的IP地址
 #以下三行需要建立在nginx已有的realip模块之中,如果没有的话需要事先源码安装nginx的时候做如下操作:./configure --prefix=/usr/local/nginx --with-http_stub_status_module  --with-http_realip_module   然后make&& make install 如果不安装的话,会进行报错

 53              set_real_ip_from 192.168.152.128/24;  
 54              set_real_ip_from 192.168.152.130/24;  
 55              real_ip_header X-Forwarded-For;       
 56  }
 57         location / {
 58             root   html;
 59             index  index.html index.htm;
 60         }

4. 网页测试:

正常输入192.168.152.129 出现的是nginx网页

输入192.168.152.129/index.html 出来的是静态页面,是刚才自己写入的一个网页

emmmm 因为我输入的是中文字符,他不能体现出来

输入192.168.152.129/index.jsp,访问nginx的地址实际上是访问了两台tomcat的页面,并且轮询显示


tomcat 查看访问日志:

[root@server ~]# cd /usr/local/apache-tomcat-9.0.16/logs
[root@server logs]# ls
catalina.2021-07-04.log  host-manager.2021-07-04.log  localhost_access_log.2021-07-04.txt
catalina.out             localhost.2021-07-04.log     manager.2021-07-04.log
[root@server logs]# cat localhost_access_log.2021-07-04.txt 
192.168.152.130 - - [04/Jul/2021:13:35:49 +0800] "GET / HTTP/1.1" 200 11286
192.168.152.130 - - [04/Jul/2021:13:35:49 +0800] "GET /tomcat.css HTTP/1.1" 200 5581
192.168.152.130 - - [04/Jul/2021:13:35:49 +0800] "GET /tomcat.png HTTP/1.1" 200 5103
......

5. 利用图片动静分离

很多时候动态页面的内容也不全都是动态的,比如图片就是静态的,那么我们在jsp页面内插入一个静态图片,观察访问的结果
nginx处理静态图片,Tomcat处理动态页面配置
Tomcat指路径,nginx放图片
目录名称需要和Java项目名称相同

在nginx配置文件中添加如下内容,以图片格式为结尾进行匹配

[root@client ~]# vim /usr/local/nginx/conf/nginx.conf

 42     server {
 43         listen       80;
 44         server_name  localhost;
 45         #charset koi8-r;
 46         #access_log  logs/host.access.log  main;
 47 
 48         location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
 49           root html;
 50           expires 30d;
 51         }
#访问以图片格式结尾的文件时,缓存30天,为了提高访问速度不用重复发送请求

#进入nginx的网页目录,新建一个网页,里面存放两个不同格式的图片
[root@client ~]# cd /usr/local/nginx/html/
[root@client html]# mkdir test
[root@client html]# cd test
[root@client test]# ls
4.jpg  5.png

[root@client test]# systemctl restart nginx

在tomcat 1服务器中进行配置:

[root@server ~]# vim /usr/local/apache-tomcat-9.0.16/webapps/test/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" );%>
<img src="4.jpg">
</body>
</html>

[root@server ~]# shutdown.sh
[root@server ~]# startup.sh


在tomcat 2服务器中进行配置:

[root@localhost ~]# vim /usr/local/apache-tomcat-9.0.16/webapps/test/index.jsp

<%@ 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" );%>i
<img src="5.png">
</body>
</html>

[root@localhost ~]# shutdown.sh
[root@localhost ~]# startup.sh

5.1 网页测试:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值