反向代理概念

反向代理概念[1]:

先理解正向代理。假设用户A需要访问网站C(这个网站正常工作),但通过浏览器发现访问不到(可能是国外网站,被墙了)。又知有一代理服务器B,A可以访问B,B可以访问C,所以A可以通过B作代理访问C了。这时B作中转站,由A发给C的流量最终从A发向B,B负责转发到C,由C发给A的流量也一样道理,事实上A通过跳板B而访问C;

再看反向代理。假设用户A访问服务器B,要从B网站获取X文件。然而服务器B上没有X文件。这时B充当反向代理,根据配置条件在另一个指定的服务器C(可以在同一局域网,也可以不在)上把X文件取回来,然后返回给A。B作为一个接口服务器,把背后C服务器(不止一个,有可能上百个Server)隐藏起来。用户A需要访问这一群服务器时,统一由B接收请求,根据B的配置从不同的服务器读取需要的数据。从用户的角度看,A并不知道实际访问了哪个服务器,只知道一个服务器B。反向代理通常是基于安全需要,有利于统一化网站。

1. 安装服务器软件

在虚拟机上安装好Win7、WinXP系统。在Win7上安装Nginx[2],在XP上安装Apache(为了方便,本例使用APMServ软件[3])。开启相关服务后(端口均为80),在两个系统的浏览器中访问127.0.0.1(APMServ中可以将默认网站目录的phpinfo.php更名为index.php),能够正常访问即可。

 

2. 配置固定IP

反向代理有根据域名和根据路径两个情况。为了方便,现在先把两个系统的IP固定下来,并绑定两个域名(不需要经过外网DNS,修改hosts文件就可以)。由于两个虚拟机采用桥接的方式连接路由器,所以在路由器的设置后台页面中(192.168.1.1),绑定两个虚拟系统的IP地址(开启DHCP则在固定IP分配中用MAC绑定IP,关闭则在两个虚拟系统中使用静态IP方式连接)。本例中Win7的IP为192.168.1.161,WinXP的IP为192.168.1.160,从DHCP的客户端列表能看到(KavMors客户为主机)。使用DHCP时如果虚拟机无法连接到路由器,尝试先点击【虚拟机->可移动设备->网络适配器->断开连接】断开虚拟机的网卡,再重新连接上。

在实际系统中,通过浏览器访问192.168.1.160和192.168.1.161,可以看到APMServ和Nginx的主页

3. 绑定域名

这一步需要把域名和IP绑定起来。域名不需要申请,修改一下hosts文件就可以了。打开hosts文件:C:\Windows\System32\drivers\etc,用记事本打开hosts文件,再结尾的地方把自定义的域名和192.168.1.161对应输入:

注意两个域名都要绑定192.168.1.161这个IP。因为本例需要用Nginx作反向代理,无论是vm-xp.com还是xm-win7.com,都要经过Nginx(1.161)。保存修改后,在浏览器访问这两个域名,都可以访问到Win7中的Nginx。

 

4. 基于域名的反向代理配置

现在作以下假设:虚拟机Win7和WinXp在同一局域网中,但与主机不在同一局域网中(实际上是在的),主机不能访问192.168.1.160但可以通过域名访问192.168.1.161。这时有以下需求:通过www.vm-win7.com可以访问Win7的网站目录,通过www.vm-xp.com可以访问WinXP的网站目录。但由于两个域名都指向Win7的IP,所以要在Win7的Nginx上建反向代理。

在Win7中,从Nginx的目录打开conf/nginx.conf编辑:

4.1  把#37行改为 server_name localhost www.vm-win7.com,表示当域名为localhost或www.vm-wim7.com时,使用这个server区域的配置;

4.2  在第一个server区域结束后(#80行),加入新的server配置,如下图:

server_name表示当域名为www.vm-xp.com时使用这个server的配置,proxy_pass是反向代理的配置语句,表示请求映射到192.168.1.160:80。保存后打开cmd,cd命令进入nginx的目录后,输入nginx -s reload,重启nginx。

在浏览器中分别访问两个域名,可以发现两个域名已经定向到Win7和WinXP的主页了。Nginx反向代理把win7.com的的流量交给自己处理,把winxp.com的流量交给192.168.1.160(VM-XP)的80端口处理。虽然两个域名指向同一IP,但可以访问不同的主机。

 

5. 基于路径的反向代理配置

在第4点中,根据不同域名可从同一IP访问不同的主机。现在作以下假设:只有一个域名www.vm-win7.com,这个域名绑定到192.168.1.161,192.168.1.160不可被实际主机直接访问。需配置一反向代理,当访问www.vm-win7.com/xp/时,访问vm-xp的网站目录,其余路径访问vm-win7的目录。

在Win7中,从Nginx的目录打开conf/nginx.conf编辑:

5.1 在#42行中,插入以下红色框内的内容:

表示访问/xp时映射到192.168.1.160(vm-xp)上,下面三个proxy_set_header参数表示传递头信息参数。保存后打开cmd,cd命令进入nginx的目录后,输入nginx -s reload,重启nginx。

当访问www.vm-win7.com时,可以访问到vm-win7的Nginx目录;访问www.vm-win7.com/xp/时,可以访问到vm-xp的Apache目录。

 

6. 总结

本文讲述了Nginx配置反向代理的基本设置。反向代理可基于域名或基于路径转发,本质上没太大区别,但有条件的话,建议使用基于域名的转发。基于路径会出现网站根目录和域名根目录不对应的情况,如上述例子中,在访问www.vm-win7.com/xp/时,会发现phpinfo页面的图标不能显示(如下图)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值