基于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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342