基于nginx+tomcat的反向代理实现

一、环境配置

  • 虚拟机:VMware Workstation Pro
  • 服务端操作系统:CentOS-7-x86_64(无界面极简版)
  • 模拟访问的客户端:Windows 10家庭版 Google Chrome浏览器
  • nginx版本:nginx-1.11.6
  • tomcat版本:apache-tomcat-9.0.21
  • idea版本:IntelliJ IDEA 2019.1 x64
  • maven版本:apache-maven-3.6.1

二、反向代理

百度百科上对反向代理的定义:

服务器根据客户端的请求,从其关联的一组或多组后端服务器(如Web服务器上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在.

nginx作为一种轻量级的反向代理服务器,能够有效的处理分布式服务器的负载均衡问题。
本文中服务器架构图:

部署架构图

三、在linux中部署Tomcat服务器

在该模拟项目中,我将服务器部署在了linux中,当然直接部署在windows上也未尝不可,不过我想着要尽量模拟一下比较正式的环境,故新建了两台linux虚拟机在其中部署了tomcat服务器。(但本人做这个实验只是为了随便尝试一下做着玩玩,并不懂真实环境下反向代理服务器的架构是什么样的,如果架构部署的有问题,请多多理解)

部署tomcat服务器需要java环境即jdk,关于linux中jdk压缩包的下载有多种方式,如使用wget指令、使用yum insatll直接安装或使用xftp等工具从windows中传输均可。
我采用的是在windows端下载然后使用xftp工具传输到linux中的方法(顺带一提,现在在oracle下载jdk居然要登陆账号了=.=)。使用下列指令解压jdk压缩包并将其重命名。

tar -zxvf jdk-8u211-linux-x64.tar.gz
mv jdk-8u211-linux-x64 jdk

然后配置java环境变量,在/etc/profile文件末尾添加下述代码:

vim /etc/profile#进入/etc/proflie

#在/etc/profile中添加下述代码
export JAVA_HOME=/root/jdk#这里填你自己的jdk地址
export JRE_HOME=/root/jdk/jre
export CLASSPATH=/root/jdk/lib

PATH=$PATH:$JAVA_HOME/bin
export PATH

#保存文件后执行下述代码使配置生效
source /etc/profile

验证jdk是否是否安装成功并配置好环境,输入java指令,若显示下方图片中内容则说明成功。


java.png

Java环境安装完成后,继续按照上述方法下载、传输、解压Apache tomcat。
进入解压后的tomcat文件夹,文件夹内结构如下图所示:


tomcat.png

在该文件夹中执行bin/startup.sh指令即可运行tomcat服务器。
通过curl localhost:8080可以验证tomcat是否部署成功,若已关闭Centos防火墙,则其他主机也可以访问该tomcat服务器了,通过Windows的浏览器访问虚拟机的8080端口即可看见熟悉的tomcat服务界面了。

四、编写一个简易的Web项目将其部署包tomcat服务器上

通过idea创建一个Maven项目,为了简单起见,我们也不费劲去写什么jsp界面了,就用他自动生成的index.jsp。maven项目的具体类型如下图所示:

maven.png

自动生成的项目目录和index.jsp文件:
项目目录.png

然后点击idea右侧maven标签,点击package,项目会自动在target目录中生成一个项目名.war文件,我的是app.war。(如果自己不方便生成这个war包,可通过该地址下载我的链接:https://pan.baidu.com/s/1pESuRH8ObTcpfwNBJkZs9Q 提取码:3o8t)
打包.png

然后将虚拟机中tomcat目录下的webapps文件夹中所有的内容全部删除,将生成的app.war文件通过xftp传输到该文件夹下。重启tomcat,使用curl localhost:8080指令,输出如下内容,说明项目在tomcat上部署成功。
curl.png

同理,修改index.jsp内容,将其中的Hello World!修改成Bad World!,将其打包传输到另一台tomcat服务器上运行,两个项目内容不一致是为了区分nginx分配给哪一个服务器做出了响应。

五、修改nginx配置文件使其代理两个tomcat服务器

在nginx安装目录(系统帮你生成的内个,不是下载的安装包那里,我的是/usr/local/nginx)下,通过vim conf/nginx.conf编辑nginx.conf文件。
找到#gzip on;标注的位置,在下面加上如下代码:

 upstream tomcat {#tomcat是指服务器类型,我这里使用的是tomcat服务器则写tomcat
                # ip_hash;#如果这里没有注释掉ip_hash则是按照ip地址的hash值做负载均衡
                server 192.168.184.135:8080 weight=1;#这里是你tomcat服务器的IP地址
                server 192.168.184.134:8080 weight=1;#设置weight=1是指该服务器的访问权重为1
                }

并在下方的location/{标签内加入如下几句代码:

proxy_pass http://tomcat;#这个必须加
proxy_redirect default;
proxy_connect_timeout 10;#设置超时时间

最终,conf/nginx.conf文件结构如下(更改部分,其余部分不动):


conf.png

修改完配置文件后保存,然后执行下述语句检验配置文件书写格式是否正确合法,然后重启nginx。

/usr/local/nginx/sbin/nginx -t#测试配置文件修改是否正常
/usr/local/nginx/sbin/nginx -s reload#重新加载

大功告成!现在我们来测试一下代理是否成功,在第四个大标题中我们将两个war包上传到nginx代理的两个tomcat中,其中的index.jsp文件分别会显示“Hello World!”和“Bad World!”,现在我们来测试一下。


test.png

nginx主机测试成功,当然是用windows主机的浏览器访问也是没问题的,只要关闭了Centos的防火墙即可。


Bad

Hello

作者还在学习中,如有问题欢迎在下方留言,谢谢。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚

你可能感兴趣的:(基于nginx+tomcat的反向代理实现)