会员控制台 会员登陆 会员注册 最后更新 高级搜索 会员投稿 退出登陆
设为首页
收藏本站
留言给我
  首页 | 操作系统类 | 程序设计类 | 数据库类 | 应用服务类 | 网络及硬件类 | 其他技术 | GBunix论坛
操作系统类
程序设计类
数据库类
应用服务类
网络及硬件类
其他技术
Unix中文 / 应用服务类 / 其他应用 / Linux防火墙上的Apache反向代理
Linux防火墙上的Apache反向代理
2004-08-03    吴阿亭 ( Jephe Wu )       点击:
Linux防火墙上的Apache反向代理
一:本文目的: 介绍如何在企业防火墙上编译和设置带有代理和重写规则功能的Apache, 以极具弹性的虚拟
主机设置允许外部用户通过防火墙存取内部局域网上众多的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中增加一行记录即可。
了解更多详情,参与讨论,请进入GBUNIX论坛

http://www.gbunix.com/bbs/index.php
责任编辑: trotter

相关文章
用Apache反向代理设置对外的WWW和文件服务器 - 08-07 02:42 pm - 点击: 244

发表评论 查看评论 加入收藏 Email给朋友 打印本文
给该文章评分
1 2 3 4 5 6 7 8 9 10
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
发表评论
标题:
内容:
声明:本站资讯均来自互联网,所有文章版权归原作者和出版者所有,如涉及版权问题,请来信告知!
Copyright © 2002-2004 GBunix.com. All rights reserved.