反向代理概念
正向代理指的是:用户隐藏自己的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
,并重新加载配置文件启动nginxserver { 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包含正则表达式,则必须要有~或者~*标识