主机设置允许外部用户通过防火墙存取内部局域网上众多的WEB服务器。
二:测试环境: Redhat Linux 7.2, Apache 1.3.24, 公司域名假定为company.com.
三:网络结构
下面是一个典型的公司的网络构造图。(网络构造图)
注:
a. 防火墙F上连结两块网卡,eth0为外部公共地址1.2.3.4,eth1为内部保留地址192.168.2.1。
b. 内部三台WEB服务器分别为A, weba.company.com;B, webb.company.com;C, webc.company.com,均为内部保留地址。
四: 操作步骤
如上图所示,公司以专线连接互联网,防火墙为F,内部有三台WEB服务器,均只有内部保留地址,但希望提供对外的WEB服务。
1. 设置DNS。
在防火墙(同时也是公司的DNS服务器)上设置内部三台WEB服务器的DNS,IP地址均为1.2.3.4,因此,在Internet上当我们解析weba.company.com, webb.company.com 和webc.company.com时, 均指向同一IP地址也就是防火墙的外部接口的地址1.2.3.4
2. 下载Apache.
从Apache网站http://www.apache.org下载目前最新的版本apache 1.3.24 到/root, URL是http://www.apache.org/dist/httpd/apache_1.3.24.tar.gz
3. 更改源代码使得最大允许的请求连接数目超过256,因为,默认地,Apache允许的最多连接数目为256,在一个繁忙的网站上可能
会不够,特别是本文介绍的通过防火墙上的Apache反向代理允许外部用户存取多台内部WEB服务器,可更改文件src/include/httpd.h
#cd /root 切换目录到/root下面
#tar xvfz apache_1.3.24.tar.gz 解开apache源文件到/root下
#cd apache_1.3.24 进入apache_1.3.24目录
#vi src/include/httpd.h 用vi编辑文件httpd.h
在打入vi src/include/httpd.h命令后,打入"/256"然后按回车去搜索数字256,改为1024后保存退出。
注:
a. 要支持到最多1024个客户同时请求,不仅需要更改上面的源文件,在编译安装后还要设置/usr/local/apache/conf/httpd.conf, 更改MaxClients行后面的参数为1024。
b. 如果你仅仅为了测试,或者根本不会有很多人使用,则不用更改httpd.h
4. 编译Apache.
#cd apache_1.3.24
#./configure --prefix=/usr/local/apache \ 设置安装前缀目录
--enable-module=most \ 启动大多数模块
--enable-shared=max \ 安装大多数模块为DSO(动态共享对象)
--enable-module=proxy \ 启动代理模块
--enable-shared=proxy \ 安装代理模块为DSO
--enable-module=rewrite \ 启动重写模块
--enable-shared=rewrite 安装重写模块为DSO
注: 编译Apache,启动大多数模块并建造它们成为DSO共享对象,同时支持模块proxy和rewrite且也建造它们成DSO共享对象。
#make
#make install
将安装所有Apache所需文件到/usr/local/apache目录下面。
3. 在httpd.conf中设置名字虚拟主机,加下面的行到/usr/local/apache/conf/httpd.conf最后面
NameVirtualHost 1.2.3.4:80
&VirtualHost 1.2.3.4:80 &
ServerAdmin root@company.com
DocumentRoot /usr/local/apache/htdocs
ServerName default.company.com
ErrorLog /usr/local/apache_http/logs/error_log
CustomLog /usr/local/apache_http/logs/access_log combined
UseCanonicalName Off
ProxyRequests Off
RewriteEngine on
RewriteCond %{HTTP_HOST} .*\.company\.com$
RewriteRule ^/(.*)$ http://%{HTTP_HOST}/$1 [P,L]
&/VirtualHost&
注:
a. 上面设置了基于名字的虚拟主机,当你存取任何URL,只要IP地址为1.2.3.4,且URL后面的部分域名为company.com时,便在内部进行代理和重写,请求的结果将送还给客户。
b. 上面的ServerName行无关紧要,可随便定义,因为我们只设定一项名字虚拟主机,且第一项也是默认虚拟主机
c. ProxyRequest Off,不要让Apache在1.2.3.4和端口80上做代理服务,除了当请求URL域名为company.com时提供内部的重写和代理服务。
d. RewriteEngine on, 打开重写引擎的开关,否则下面的RewriteCond和RewriteRule不将起作用。
4. 添加记录进入/etc/hosts.
在上面的虚拟主机重写规则中,重写后的URL与你请求的URL是一样的,我们的构想是放下面的三个域名到防火墙上的/etc/hosts中,这样Apache将从内部三台WEB服务器拿到内容后返还给外部用户。
192.168.2.2 weba.company.com
192.168.2.3 webb.company.com
192.168.2.4 webc.company.com
5. 结束和总结。
这样,当外部用户请求网页weba.company.com时,被送到防火墙F上的Apache,防火墙上的Apache反向代理将根据/etc/hosts中的定义直接从192.168.2.2获取内容随后返还给外部用户,从而完成内部WEB服务器weba.company.com 对外服务器的功能。
在配置完毕Apache之后,以后如果要增加更多内部的WEB服务器提供对外的服务,只需设置其DNS为1.2.3.4,且在/etc/hosts中增加一行记录即可。

