一、环境配置
- 虚拟机: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环境安装完成后,继续按照上述方法下载、传输、解压Apache tomcat。
进入解压后的tomcat文件夹,文件夹内结构如下图所示:
在该文件夹中执行bin/startup.sh指令即可运行tomcat服务器。
通过curl localhost:8080可以验证tomcat是否部署成功,若已关闭Centos防火墙,则其他主机也可以访问该tomcat服务器了,通过Windows的浏览器访问虚拟机的8080端口即可看见熟悉的tomcat服务界面了。
四、编写一个简易的Web项目将其部署包tomcat服务器上
通过idea创建一个Maven项目,为了简单起见,我们也不费劲去写什么jsp界面了,就用他自动生成的index.jsp。maven项目的具体类型如下图所示:
自动生成的项目目录和index.jsp文件:
然后点击idea右侧maven标签,点击package,项目会自动在target目录中生成一个项目名.war文件,我的是app.war。(如果自己不方便生成这个war包,可通过该地址下载我的链接:https://pan.baidu.com/s/1pESuRH8ObTcpfwNBJkZs9Q 提取码:3o8t)
然后将虚拟机中tomcat目录下的webapps文件夹中所有的内容全部删除,将生成的app.war文件通过xftp传输到该文件夹下。重启tomcat,使用curl localhost:8080指令,输出如下内容,说明项目在tomcat上部署成功。
同理,修改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文件结构如下(更改部分,其余部分不动):
修改完配置文件后保存,然后执行下述语句检验配置文件书写格式是否正确合法,然后重启nginx。
/usr/local/nginx/sbin/nginx -t#测试配置文件修改是否正常
/usr/local/nginx/sbin/nginx -s reload#重新加载
大功告成!现在我们来测试一下代理是否成功,在第四个大标题中我们将两个war包上传到nginx代理的两个tomcat中,其中的index.jsp文件分别会显示“Hello World!”和“Bad World!”,现在我们来测试一下。
nginx主机测试成功,当然是用windows主机的浏览器访问也是没问题的,只要关闭了Centos的防火墙即可。
作者还在学习中,如有问题欢迎在下方留言,谢谢。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚