[原创]用apache反向代理解决单外网ip对应内网

几年前开始在学校的服务器上建网站,那时学校通过一台自制的路由器(用台双网卡的电脑安装linux系统)上网,这样通过linux中的iptables做nat上网,并同时做80口对内网web服务器的端口映射,这台路由的wan网卡可以得到一个外网的ip地址,通过动态域名解析(如花生壳、希网3322.org)可以建自己的对外服务的网站了。类似的方法有很多,比如现在可以用宽带路由器也可以做端口映射。
但是慢慢出现了一个问题,学校的网络应用增加,比如要做多个网站系统,而一台服务器无法应付多个应用,这时需要用多个服务器分别运行多个web服务,这时外网的一个ip只有一个80口,就无法映射多台内网ip的80口。
最初的解决办法是就外网的其它端口如8080映射到另一台服务器,这样就出现
mydomain.com对应内网服务器1
mydomain.com:8080对应内网服务器2
这样基本解决问题,但是对于一般的用户(学生和学生家长)往往不能理解这样的域名,经常会出错
后来通过在网上查找资料和向其它网友学习,找到了一种通过apache反向代理来解决这个问题的方法。
下面是我们的方法
我们的想法是:先按原方法建好域名服务两个域名(www.mydomain1.comwww.mydomain2.com)同时解析指向到外网ip上,在路由器上将80口映射到内网的一台安装apache的服务器(ip地址192.168.2.1)上,由这台apache服务器根据域名分别反向代理到内网的其它两台web服务器(一台linux+apache+mysql+php,ip地址192.168.2.100,另一台2003+iis6+asp+access,ip地址192.168.2.101)的80口上。
两台web服务器的设置没有什么特别的,这里不多说了,主要说说这台反向代理的apache服务器
1、准备软件
redhat 9 三张光盘
网上下载apache 2.2.2 安装包
2、安装redhat
3、安装apache
tar -zvxf httpd-2.2.2.tar.gz
cd httpd-2.2.2
./configure --prefix=/usr/local/apache
–enable-proxy
–enable-rewrite
–enable-proxy-http
编绎时启用mod_proxy、mod_rewrite、mod_proxy_http模块
make
make install
4、配置httpd.conf
加入以下内容

公共部分

ProxyRequests Off
KeepaLive On

Order deny,allow
Allow from all

##虚拟主机名 192.168.2.1 是本机ip地址
NameVirtualHost 192.168.2.1

虚拟主机1

ServerName [mydomain1.com](http://www.mydomain1.com)
ProxyPass      /      [mydomain1.com/](http://www.mydomain1.com/)
ProxyPassReverse  /      [mydomain1.com/](http://www.mydomain1.com/)

虚拟主机2

ServerName [mydomain2.com](http://www.mydomain2.com)
ProxyPass      /      [mydomain2.com/](http://www.mydomain2.com/)
ProxyPassReverse  /      [mydomain2.com/](http://www.mydomain2.com/)

##对应的web主机如果是iis6,会经常出现Proxy Error,加入以下两条就可以解决
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

5、修改/etc/hosts
vi /etc/hosts
##插入以下内容,将域名指向内网web服务器的ip地址
192.168.2.100 mydomain1.com
192.168.2.101 mydomain2.com

6、启动apache服务
/usr/local/apache/bin/apachectl -k start

7、测试服务器效果,如果正常,将以上apache启动命令加入到/etc/rc.d/rd.local中,使其每次启动自动运行。

如果要增加主机,只要做好以下四件事

1、将新域名解析到外网ip

2、在httpd.conf中增加新虚拟主机

3、在/etc/hosts中增加域名的对应内网ip记录

4、建好新的内网web服务器