反向代理概念

正向代理指的是:用户隐藏自己的ip地址,使用正向代理服务器去访问服务器,正向代理,代理的是客户端用户

反向代理指的是:真实服务器端隐藏自己的ip地址,使用反向代理服务器去接收用户请求,
反向代理,代理的是服务器端

反向代理案例一

  • 实现效果

    打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到Linux系统的tomcat主页面中。

  • 具体实现
    • 在linux系统上安装nginx,安装tomcat,使用默认端口8080,并启动起来

      1)安装tomcat之前需要安装java环境:sudo apt install openjdk-8-jdk
      	使用java -version检查安装java环境是否成功。
      2)下载tomcat8并且解压
      	下载:sudo wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.66
      		/bin/apache-tomcat-8.5.66.tar.gz
      	解压:tar zxf apache-tomcat-8.5.66.tar.gz
      	启动tomcat:来到tomcat/bin目录下执行:./startup.sh
      	关闭tomcat:来到tomcat/bin目录下执行:./shutdown.sh
      3)设置防火墙
      	查看当前防火墙已经开放的端口:firewall-cmd --list-all
      	添加http服务端口:
          firewall-cmd --add-service=http --permanent
          firewall-cmd --add-port=80/tcp --permanent
          firewall-cmd --add-port=8080/tcp --permanent
      	重新加载防火墙:firewall-cmd --reload
      	还是不可以的话,可能是vps服务商的防火墙策略原因,去vps服务商官网配置防火墙
      	本次实验,需要开放8080,8081,8082,9001端口,根据上面命令设置好这些端口
      4)测试
      	在window浏览器中输入http://linux服务器ip:8080,如果设置成功,就会看到tomcat启动页
      	但这种访问并没有使用nginx,继续往下看。
    • 在window中的hosts文件中配置域名-ip解析

      hosts目录路径:C:\Windows\System32\drivers\etc
      
      添加:自己linux服务器ip地址  	www.123.com
      配置好后,我们可以通过在window浏览器中输入:www.123.com:8080,就能访问到tomcat首页
      记住一定要刷新本机中的dns缓存,刷新缓存命令:ipconfig/flushdns
      
      注意:我们已经实现通过在浏览器输入www.123.com:8080查看到tomcat首页,这个过程中并没有使用
      反向代理服务器,我们要实现的是,在浏览器输入www.123.com使用默认的80端口即可查看到tomcat首页,
      这个过程需要我们首先访问反向代理服务器的ip地址和80端口,由反向代理服务器去将请求转发到我们真正的
      服务器ip地址和8080端口
    • 在nginx进行请求转发的配置(反向代理)

      server {
      	listen 80 default_server;   #反向代理服务器监听的端口
      	server_name 149.28.29.194;  #反向代理服务器的ip地址
      	location / {
      		#当监听到有请求访问反向代理服务器的80端口,就转发到真实服务器。
      		proxy_pass http://127.0.0.1:8080;   
      	}
      }
      配置好后,重启nginx服务
      
      至此,配置nginx配置好后,通过访问在本电脑访问www.123.com,则首先根据我们hosts文件中配置,
      将www.123.com转换成反向代理服务器的ip地址,即访问反向代理服务器的80端口,此时nginx监听到
      有请求访问后,将请求转发到真实服务器的ip地址和端口
      
      本次实验nginx和tomcat都在一个linux系统上,所以是转发到本地的8080端口。

反向代理案例二

  • 实现效果
    使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
    访问http://127.0.0.1:9001/edu/a.html     直接跳转到127.0.0.1:8080/edu/a.html
    访问http://127.0.0.1:9001/vod/b.html     直接跳转到127.0.0.1:8081/vod/b.html
  • 具体实现
    • 搭建两个tomcat服务,监听8080端口,8081端口

      直接复制tomcat安装目录到另一个文件夹,修改tomcat/conf/server.xml文件将监听的端口
      更改成8081端口,其他监听的端口也更改掉,防止和之前的tomcat监听的端口冲突。配置好后,
      启动两个tomcat,最后在window浏览器测试两个tomcat是否成功。

    • 在两个tomcat的webapps目录下分别创建一个项目edu,vod,并在项目下创建测试html

      在tomcat8080的webapps目录下增加edu目录,并在该目录下新增a.html,在该文件中写
      <h1>this is port 8080</h1>,当我们访问http://linuxIp地址:8080/edu/a.html
      就可以访问到a.html内容。在tomcat8081的webapps目录下增加vod目录,并增加b.html,
      文件内容填8081端口,操作同上,当我们访问8081端口时,即可看到b.html内容
      
      注意:我们要实现的效果是访问服务器的9091端口,路径是/edu/a.html时,给我找到tomcat8080端口,
      显示edu/a.html页面,路径是/vod/b.html时,给我找到tomcat8081端口,显示vod/b.html页面
    • 配置反向代理服务器,nginx.conf,并重新加载配置文件启动nginx

      server {
      	listen 9001 default_server;
      	server_name 149.28.29.194;
      
      	location ~ /edu/ {
      		proxy_pass http://127.0.0.1:8080;
      	}
      
      	location ~ /vod/ {
      		proxy_pass http://127.0.0.1:8081;
      	}
      }
      
      配置完毕后,实现的效果是:访问http://149.28.29.194:9001/edu/a.html后
      反向代理服务器监听到该请求,根据路径中edu,就去访问本地8080端口,即我们配置的tomcat8080服务
      的webapps下的edu项目下的a.html,相当于将请求替换成了:http://149.28.29.194:8080/edu/a.html
    • location指令说明

      该指令用于匹配URL,语法如下:
      location [ = | ~ | ~* | ^~ ] uri {
      }
      1)= :用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,
      	如果匹配成功,就停止继续向下搜索并立即处理该请求
      2)~ :用于表示uri包含正则表达式,并且区分大小写,例如edu和EDU
      3)~* :用于表示uri包含正则表达式,并且不区分大小写
      4)^~ :用于不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location|
      	后立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
      	
      注意:如果uri包含正则表达式,则必须要有~或者~*标识