用apache反向代理解决单外网ip对应内网多个web主机的问题

转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的。

来源地址:http://www.itshantou.com/Servers/web/06/10/44219.html

几年前开始在学校的服务器上建网站,那时学校通过一台自制的路由器(用台双网卡的电脑安装linux系统)上网,这样通过linux中的iptables做nat上网,并同时做80口对内网web服务器的端口映射,这台路由的wan网卡可以得到一个外网的ip地址,通过动态域名解析(如花生壳、希网3322.org)可以建自己的对外服务的网站了。类似的方法有很多,比如现在可以用宽带路由器也可以做端口映射。

但是慢慢出现了一个问题,学校的网络应用增加,比如要做多个网站系统,而一台服务器无法应付多个应用,这时需要用多个服务器分别运行多个web服务,这时外网的一个ip只有一个80口,就无法映射多台内网ip的80口。

最初的解决办法是就外网的其它端口如8080映射到另一台服务器,这样就出现

http://www.mydomain.com对应内网服务器1

http://www.mydomain.com:8080对应内网服务器2

这样基本解决问题,但是对于一般的用户(学生和学生家长)往往不能理解这样的域名,经常会出错

后来通过在网上查找资料和向其它网友学习,找到了一种通过apache反向代理来解决这个问题的方法。

下面是我们的方法

我们的想法是:先按原方法建好域名服务两个域名(www.mydomain1.com、www.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

ServerNamewww.mydomain1.com

   ProxyPass     /     http://www.mydomain1.com/

   ProxyPassReverse /     http://www.mydomain1.com/

## 虚拟主机2

ServerNamewww.mydomain2.com

   ProxyPass     /     http://www.mydomain2.com/

   ProxyPassReverse /     http://www.mydomain2.com/

##对应的web主机如果是iis6,会经常出现Proxy Error,加入以下两条就可以解决

    SetEnvforce-proxy-request-1.0 1

    SetEnvproxy-nokeepalive 1

5、修改/etc/hosts

vi /etc/hosts

##插入以下内容,将域名指向内网web服务器的ip地址

192.168.2.100 www.mydomain1.com

192.168.2.101 www.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服务器

本人根据此文章的内容进行了具体实践操作,并记录了实践过程,可移步观看http://blog.csdn.net/xiaohui_blog/article/details/17501123



[转]用apache反向代理解决单外网ip对应内网多个web主机的问题的更多相关文章

  1. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践

    欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...

  2. 外网IP和内网IP的区别

    这两天遇到一个bug,折腾的够呛,已经上线的项目,出现了个人登录不上的情况,瞬间整个人都不好了,首先找问题,在本地和测试服务器上都没问题,打包发布到正式环境就出现问题了,刚开始我看不了日志,日志要找别 ...

  3. 网络基础 外网IP,内网IP,虚拟机的网络设置

    外网IP,内网IP的关系 在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册.但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用. 这三个地址 ...

  4. Android 获取本地外网IP、内网IP、计算机名等信息

    一.获取本地外网IP public static String GetNetIp() { URL infoUrl = null; InputStream inStream = null; try { ...

  5. 外网IP和内网IP区别

    外网IP和内网IP区别? 网络结构 如图,假设我们的计算机现在就是设备一,我们想要访问百度.如果我们正使用着校园网,那么首先我们需要先通过校园网的路由器把我们的内网ip转为校园网的外网ip.然后通过这 ...

  6. 通过外网IP访问内网

    外网服务器:外网IP1,内网IP192.168.2.156 内网服务器:内网IP192.168.2.206 通过访问外网服务器8083端口,转发到内网服务器的8083端口. 在外网服务器设置映射规则: ...

  7. 网络通信分享(二):外网ip和内网ip

    一.内网ip包括两类: 1:tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255  172.16.0.0/ ...

  8. 2017.2.9日总结--外网IP和内网IP

    Linux自己不能通过自己的外网访问自己必须通过内网访问自己

  9. 使用apache反向代理tomacat

    起源 在大部分的生产环境中,基本上使用的都是java程序,从而促进了各种应用程序中间件的产生,在这里大概有几种,tomcat作为最著名的开源servlet容器,jboss也是开源的,而且有管理界面,主 ...

随机推荐

  1. Android Eclipse Errors

    1.The import org.apache.http.client; tip: cannot be resolved; resolve: Find library in your sdk and ...

  2. 如何安装,卸载eclipse中的ADT,或者更新ADT

    昨天手贱把Android的SDK升级了,然后搞到ADT的版本不对应,然后从网上搜了一些办法~效果还可以,重新安装了一次ADT. 卸载ADT的方法,方法如下(我的Eclipse版本为3.5): 1.选择 ...

  3. PL/SQL 流程控制语句-条件结构,循环结构

    条件结构 一.IF-THEN语句 IF-THEN语句是最简单的IF语句. 语法: IF condition THEN Statements END IF; 例子: declare v_score nu ...

  4. (转)在Eclipse中使用JUnit4进行单元测试

    原地址:http://blog.csdn.net/andycpp/article/details/1327147

  5. 求a,b在区间上的公倍数个数

    给你两个数 a,b.问你区间 [1,N]中都是有多少个数是a,b的公倍数.当数据很大的时候,遍历肯定会超时.其实,我们可以首先求出 lcm(a,b).因为我们知道(a,b)公倍数都是它最小公倍数的倍数 ...

  6. java中的native关键字

    参照下面的链接http://blog.163.com/yueyemaitian@126/blog/static/21475796200701491621267/

  7. ubuntu sendmail

    一.安装 ubuntu中sendmail函数可以很方便的发送邮件,ubuntu sendmail先要安装两个包. 必需安装的两个包: 代码  sudo apt-get install sendmail ...

  8. Bulk-Only传输协议 UFI命令块规范

    USB设备分为5大类,即显示器.通信设备.音频设备.人机输入和海量存储.通常所用的U盘.移动硬盘均属于海量存储类.海量存储类的规范中包括4个独立的子规范,即CBI传输.Bulk-Only传输.ATA命 ...

  9. Win 10 、Win 8 系统默认字体如何修改为宋体

    Win 10 字体改为宋体方法:新建一个文本文档txt,将如下代码复制进去:Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWA ...

  10. [置顶] SPL讲解(4)--Criteria操作篇

    概念 以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的.如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和De ...