前言——反向代理是什么
- 要说反向代理是什么,这里就不得不提到代理是什么
代理: 当客户机访问服务器时,中间会有一个代理服务器,客户机经过代理服务器访问服务器的这个过程就是代理,就像一些专卖店,比如apple的专卖店扮演的角色就是代理服务器,而apple的总公司扮演的角色就是被访问服务器,去买apple的顾客扮演的角色就是客户机
- 知道了代理是什么,而下一个就是正向代理
正向代理: 正向代理就是最常用的代理模式,客户端要清楚要访问的服务器的ip地址,当客户机访问目标服务器时会经过代理服务器,然后代理服务器去被访问的服务器发送请求,再由被访问的服务器回复代理服务器,由代理服务器回复客户机,这个过程中被访问的服务器全程都不知道客户机的真实ip,而客户机却知道被访问服务器的ip,这是因为正向代理服务器屏蔽了或者隐藏了客户机的真实ip
- 知道了正向代理是什么,那么就是最后的反向代理
反向代理: 反向代理的代理服务器一般使用的都是Nginx来搭建,这里的Nginx扮演的角色像是一个转发器,在他的后端,一般会搭建多台轻量级的tomcat服务器,并且基于某种算法来实现Tomcat服务器的来回切换。客户机访问的是Nginx代理服务器的地址,由Nginx服务器转发给后面的Tomcat服务器,之后Tomcat服务器回应Nginx服务器,Nginx服务器再回应客户机,因为真实服务器放在Nginx服务器的后面,从而隐藏了真实服务器的ip地址,也实现了负载均衡。
以上说明都是个人理解,如有错误,希望及时在评论区回复,谢谢
一、反向代理示例图
二、实验环境
主机名 | ip地址 | 扮演角色 |
Nginx | 192.168.100.7 | Nginx服务器 |
Tomcat-01 | 192.168.100.8 | Tomcat服务器 |
Tomcat-02 | 192.168.100.9 | Tomcat服务器 |
三、实验要求
让客户机在访问的时候,无需得知Tomcat服务器的真实ip,就可以访问Tomcat服务器的页面,并且可以让两台Tomcat服务器的页面来回切换,实现负载均衡
四、实验步骤
(1)首先先搭建两台Tomcat服务器
******两台Tomcat服务器搭建步骤相同,但是网页内容不同,这样测试时方便辨认 ******(1)做基础配置 [root@centos7-008 ~]# hostnamectl set-hostname tomcat-01 [root@centos7-008 ~]# su [root@tomcat-01 ~]# systemctl stop firewalld [root@tomcat-01 ~]# setenforce 0 setenforce: SELinux is disabled [root@tomcat-01 ~]# mount /dev/cdrom /media/cdrom mount: /dev/sr0 写保护,将以只读方式挂载 ******(2)搭建tomcat服务器 [root@tomcat-01 ~]# yum -y remove java (检查是否已经安装java) 已加载插件:fastestmirror 参数 java 没有匹配 不删除任何软件包 [root@tomcat-01 ~]# ll (上传java的软件包) 总用量 177124 -rw-------. 1 root root 1262 9月 3 18:18 anaconda-ks.cfg -rw-r--r-- 1 root root 181367942 2月 1 00:15 jdk-8u91-linux-x64.tar.gz [root@tomcat-01 ~]# tar xf jdk-8u91-linux-x64.tar.gz (解压) [root@tomcat-01 ~]# mv jdk1.8.0_91/ /usr/local/java (移动到java目录) [root@tomcat-01 ~]# vim /etc/profile.d/java.sh (编写Java脚本,优化执行路径) export JAVA_HOME=/usr/local/java export PATH=$PATH:$JAVA_HOME/bin [root@tomcat-01 ~]# chmod +x /etc/profile.d/java.sh (添加可执行权限) [root@tomcat-01 ~]# source /etc/profile.d/java.sh (执行脚本) [root@tomcat-01 ~]# echo $PATH (查看是否优化成功) /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin [root@tomcat-01 ~]# ll (上传tomcat的软件包) 总用量 186324 -rw-------. 1 root root 1262 9月 3 18:18 anaconda-ks.cfg -rw-r--r-- 1 root root 9417469 2月 1 00:21 apache-tomcat-8.5.16.tar.gz -rw-r--r-- 1 root root 181367942 2月 1 00:15 jdk-8u91-linux-x64.tar.gz [root@tomcat-01 ~]# mkdir /usr/local/tomcat (创建主目录) [root@tomcat-01 ~]# tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/tomcat/ (解压) [root@tomcat-01 ~]# /usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh (启动) Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.16 Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.16 Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.16/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/apache-tomcat-8.5.16/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.16/bin/tomcat-juli.jar Tomcat started. [root@tomcat-01 ~]# netstat -anpt | grep java (查看端口号确认已经成功启动) tcp6 0 0 :::8080 :::* LISTEN 1376/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1376/java tcp6 0 0 :::8009 :::* LISTEN 1376/java ******(3)在两台tomcat服务器上分别写上不同的网页 [root@tomcat-01 ~]# mkdri -pv /web/webapp1 bash: mkdri: 未找到命令 [root@tomcat-01 ~]# mkdir -pv /web/webapp1 mkdir: 已创建目录 "/web" mkdir: 已创建目录 "/web/webapp1" [root@tomcat-01 ~]# 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 to Tomcat-001 !!!!!!");%> </body> </html> 保存退出 [root@tomcat-01 ~]# vim /usr/local/tomcat/apache-tomcat-8.5.16/conf/server.xml (编写配置文件) 修改为: 。。。。。。 148 <Host name="localhost" appBase="/web" 149 unpackWARs="true" autoDeploy="true"> 150 <Context docBase="/web/webapp1" path="" reloadable="false"></Context> 151 <!-- SingleSignOn valve, share authentication between web applications 。。。。。。 保存退出 ******(4)重新启动tomcat服务 [root@tomcat-01 ~]# /usr/local/tomcat/apache-tomcat-8.5.16/bin/shutdown.sh (关闭) Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.16 Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.16 Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.16/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/apache-tomcat-8.5.16/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.16/bin/tomcat-juli.jar [root@tomcat-01 ~]# /usr/local/tomcat/apache-tomcat-8.5.16/bin/startup.sh (启动) Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.16 Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.16 Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.16/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/apache-tomcat-8.5.16/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.16/bin/tomcat-juli.jar Tomcat started. [root@tomcat-01 ~]# netstat -antp | grep java (检查端口确认服务已经成功启动) tcp6 0 0 :::8080 :::* LISTEN 1463/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1463/java tcp6 0 0 :::8009 :::* LISTEN 1463/java
利用测试机分别访问两个tomcat服务器,测试是否可以正常访问
成功后开始搭建Nginx服务器
(2)搭建Nginx服务器
******(1)先做基础配置 [root@centos7-007 ~]# hostnamectl set-hostname Nginx [root@centos7-007 ~]# su [root@nginx ~]# mount /dev/cdrom /media/cdrom mount: /dev/sr0 写保护,将以只读方式挂载 [root@nginx ~]# systemctl stop firewalld [root@nginx ~]# setenforce 0 setenforce: SELinux is disabled ******(2)安装Nginx必要组件和创建组等 [root@nginx ~]# yum -y install pcre-devel zlib-devel openssl-devel 。。。。。。 完毕! [root@nginx ~]# groupadd www [root@nginx ~]# useradd -g www -s /bin/false www (指定登录shell为/bin/false) ————————————————————————————————————华丽分割线———————————————————————————————————— 这个时候有人就会想一般不是会指定为/sbin/nologin嘛 /bin/false和/sbin/nologin的区别: /bin/false是最严格的禁止login选项,一切服务都不能用 而/sbin/nologin只是不能登录系统而已 ————————————————————————————————————————————————————————————————————————————————— ******(3)上传源码包,配置、编译、安装 [root@nginx ~]# ll 总用量 964 -rw-------. 1 root root 1220 9月 3 18:16 anaconda-ks.cfg -rw-r--r-- 1 root root 980831 2月 1 00:49 nginx-1.12.0.tar.gz [root@nginx ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/ [root@nginx ~]# cd /usr/src/nginx-1.12.0/ [root@nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module &&make &&make install ————————————————————————————————————华丽分割线—————————————————————————————————————— 配置模块详解 (1)--user=www --group=www 指定运行的用户、组 (2)--with-file-aio 启用文件修改支持 (3)--with-http_stub_status_module 启用状态统计 (4)--with-http_gzip_static_module 启用gzip静态压缩 (5)--with-http_flv_module 启用flv模块,提供寻求内存使用基于时间的偏移量文件 (6)--with-http_ssl_module 启用ssl模块 ——————————————————————————————————————————————————————————————————————————————————— ******(4)编辑nginx的配置文件 [root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf (添加) 。。。。。。 34 upstream tomcat_server { 35 server 192.168.100.8:8080 weight=1; 36 server 192.168.100.9:8080 weight=1; 37 } 38 。。。。。。 (下面的location写一个就行,可以把另一个删掉,或者在原本就有的项上修改) 46 location / { 47 root html; 48 index index.html index.htm; 49 proxy_pass http://tomcat_server; 50 } 51 。。。。。。 保存退出 [root@nginx nginx-1.12.0]# /usr/local/nginx/sbin/nginx -t (检查nginx语法是否正确) nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok (ok表示正确) nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@nginx nginx-1.12.0]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (启动) [root@nginx nginx-1.12.0]# netstat -antp | grep nginx (查看端口确认已经启动) tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3978/nginx: master
(3)测试
使用测试机访问Nginx服务器192.168.100.7,确认无需得知Tomcat的真实ip也可以访问Tomcat服务器的页面,并且查看是否会自动切换页面
第一次访问
第二次访问
客户机通过nginx服务器成功访问到了Tomcat服务器,并且可以实现负载均衡。至此,Nginx+tomcat负载均衡集群已经搭建完成!