用Apache反向代理设置对外的WWW服务器
有一小区,内部使用伪ip,大家通过一linux网关使用ip欺骗上网,现在有的内部用户要对外发布信息,要建立自己的www服务器。但是因为内部使用的是伪ip,必须采取一定的手段来实现从Internet到内部www主机的访问,比较常用的方法是端口转发(用ipmasqadm实现)。我在想,有没有更成熟的软件可以实现基于URL的反向NAT,也就是说,每个内部的www主机都解析到linux网关的外部网卡,当收到如www.21pt.com 的请求时,网关可以自动转发到真实的www.21pt.com (假设为192.168.1.1), 收到www.21pt.com 的响应后再改写源地址为网关的真实ip地址返回给internet用户。也就是说可以工作在应用层进行分析转发,同时工作在网络层进行地址改写。
关于实现反向web代理,除了上述的端口转发外,还可用apache实现,当仍squid的加速模式同样可实现。下面,我具体介绍apache反向web代理的实现。
一台apache服务器(双网卡)用专线接入Internet作为防火墙,在内部网段上有多台WWW服务器希望这台机器能使供外部世界访问指定的WWW服务器
这台机器真实ip地址为111.111.111.111,内部ip地址172.16.1.1
内部网段上有三台web服务器:
www1(172.16.1.101)
www2(172.16.1.102)
www3(172.16.1.103)
这三台web服务器类型不限,可以是apache,也可用IIS或其他系统。
外部dns服务器指定
www1.21pt.com(111.111.111.111)
www2.21pt.com(111.111.111.111)
www3.21pt.com(111.111.111.111)
apache配置时其它部份采用默认配置,以下才是我们关心的:
------------------------------------------------------------------------------------------
NameVirtualHost 111.111.111.111
<VirtualHost 111.111.111.111>
ServerName www1.21pt.com
ProxyPass / http://172.16.1.101/
ProxyPassReverse / http://172.16.1.101/
</VirtualHost>
<VirtualHost 111.111.111.111>
ServerName www2.21pt.com
ProxyPass / http://172.16.1.102/
ProxyPassReverse / http://172.16.1.102/
</VirtualHost>
<VirtualHost 111.111.111.111>
ServerName www3.21pt.com
ProxyPass / http://172.16.1.103/
ProxyPassReverse / http://172.16.1.103/
</VirtualHost>
--------------------------------------------------------------------
采用本方法,内部的WWW服务器和文件服务完全与外部世界隔开,不直接连接到外部,通过防火墙上运行的Apache服务提供对内部的代理访问,增强了安全性,同时在防火墙上运行的Apache 服务器上无真正的内容,黑客难以篡改内容,符合了作为防火墙要求运行服务越少越安全的准则。
采用本方法,内部的WWW服务器的内容在防火墙上进行缓存,起到加速响应的效果。