外网通过 Apache 代理访问内网多服务器

一般来说,要在外网访问内网的服务器需要在路由上做端口映射。
比如路由 IP 192.168.0.1 内网服务器 A 的 IP 192.168.0.2。
要让外网通过路由访问服务器 A 的 WEB 页面,就必须在路由上设置 TCP 80 端口映射。
即将外网对路由公网 IP TCP 80 访问转移到服务器 A 的 192.168.0.2 的 TCP 80 端口上。
这样,在外网也就是公网访问本局域网的公网 IP http 80 WEB 页面就是访问服务器 A 192.168.0.2 的 TCP 80 http WEB 服务。
如果有第二台服务器 B 或者 A 要开放另外的端口,都必须在路由上再分配一个不同的端口映射到相应的机器的相应端口上。
那么,这里要说的是:如果局域网有两台以上的服务器都要供外网访问 WEB 服务怎么办?
解决方法之一是:将不同的服务器的 WEB 服务映射到外网不同的端口上。
就是服务器 A 的 WEB 服务使用标准的 80 端口,而服务器 B 的 WEB 服务则使用 8080 端口。
但是这样,外网访问相当不方便。因为对于非 80 端口的 WEB 访问地址上必须在域名或者 IP 地址后指定端口号。
那么,解决方法二。这里要介绍的是:使用 Apache 来提供网页服务。
对于服务器 A 安装 Apache 做 WEB 服务(不论是 Win32 还是 UNIX 系统),设置路由将 80 端口映射到 A。
对于其他的服务器 B C 可以安装 Apache 或者 IIS 或者其他可能的 http 服务软件,并不需要在路由上做端口映射,也不需要 WEB 服务使用特定端口。
甚至也可以服务器 A 上另外安装一个 WEB 服务软件使用 80 以外的端口。
那么,关键的内容在于对服务器 A 上的 Apache 进行设置,做一个反向代理,让外网可以通过服务器 A 的 Apache 提供的 WEB 代理来访问和 A 在一个局域网的其他服务器 WEB 页面。
首先,打开 Apache 的 http 代理功能,编辑 httpd.conf 文件。
LoadModule proxy_module modules/mod_proxy.so
AddModule mod_proxy.c
第一行可能已在 httpd.conf 中存在,只需去掉前面的 # 注释
第二行多半需要添加,放在一起就可以了。
然后对于要代理的局域网内每个服务器设置一项:
<VirtualHost 192.168.0.2>
ServerName www.xxx.com
ProxyPass / http://192.168.0.3:88/
ProxyPassReverse / http://192.168.0.3:88/
</VirtualHost>
192.168.0.2 是服务器 A 的 IP,就是做 Apache 代理的服务器。
www.xxx.com 是域名,这个必须能解析到路由公网 IP 的域名(后面有解说)。
而 http://192.168.0.3:88 是服务器 A 能访问到的内网 WEB 服务地址。IP 和端口都可以任意指定。
对于本方法关键是必须使用域名,如果是外网固定 IP,完全可以通过修改本机 hosts 文件或者自行 DNS 解析设置一个多个虚假域名来实现指向。
对于动态 IP 的环境,就需要使用花生壳之类的服务了,同样要申请多个动态域名才能实现多个服务器的访问。
另外,对于服务器 A 的负担是比较重的,因为所有访问都必须经过 A。
同样因为这个道理,其他服务器就可以完全隐藏在 A 之后,安全性相当提高。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据