在 debian etch 上配置 apache2 反向代理虚拟主机

最近,学校里又有许多地方要申请开通网站,因为是学校,所以校园网出口主要是教育网,虽然也有电信和网通的出口,但是 IP 跟教育网的公网 IP 比起来稀有的很,所以,一般部门申请开通网站都需要开通教育网出口,而不会给他们一个电信或者网通的 IP。但问题是,教育网出口的收费是按照流量来收费的,费用相当高,所以,如果许多部门都来开通教育网出口的话,那学校在这方面会支出很大一笔。为了解决这个问题,我于是打算搞一个反向代理,出口搞成教育网和网通双线的,属于教育网免费地址的就走教育网,非免费公网地址就走网通出口。因为网通出口是包年的,不用白不用,这样就省了给教育网交钱啦。

至于反向代理是什么我就不说了,不知道的同志上 google 搜一下就知道了。这里主要写一下如何在 debian etch 上用 apache2 配置反向代理虚拟主机。

首先用 debian-40r0-i386-netinst.iso 安装最小化的系统,任何多余的东西都不要。

安装好之后,配置好 sources.list,然后更新一下系统。

用 apt-get install apache2 安装 apache 2。

安装好之后,进入 /etc/apache2/mods-enabled 目录,所有的扩展都可以删除。

然后在 /etc/apache2/mods-enabled 目录下建立 proxy 和 url_rewrite 扩展的软链接。

ln -s ../mods-available/proxy.conf proxy.conf
ln -s ../mods-available/proxy_http.load proxy_http.load
ln -s ../mods-available/proxy.load proxy.load
ln -s ../mods-available/rewrite.load rewrite.load

然后修改 proxy.conf 内容为:

proxy.conf
<IfModule mod_proxy.c>
        ProxyRequests Off
        
<Proxy *>
                AddDefaultCharset off
        
</Proxy>
        ProxyVia Off
</IfModule>

然后再修改 /etc/apache2 目录下的 apache2.conf 文件内容为:

apache2.conf
ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile /var/run/apache2.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_worker_module>
    ServerLimit          16
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
User www-data
Group www-data
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel warn
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
ServerTokens Prod
ServerSignature Off
Include /etc/apache2/sites-enabled/

其中,IfModule mpm_worker_module 段中的具体数据需要根据具体服务器的情况(如内存、CPU 等)进行配置。

接下来修改 /etc/apache2/sites-enabled 目录下的 000-default 文件:

000-default
NameVirtualHost *
<VirtualHost *>
        ServerName webgate1.ujn.edu.cn
        ServerAlias *.ujn.edu.cn *.ujn6.edu.cn *.ujn.org.cn *.ujn.cn
        DocumentRoot /usr/share/apache2/error
        RewriteEngine On
        RewriteCond %{HTTP_HOST} (.*)\.ujn(6*)\.(edu\.cn|org\.cn|cn)
        RewriteRule ^/(.*) http://%{HTTP_HOST}/$1 [P,L]
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature Off
</VirtualHost>

这个文件是配置反向代理的关键,ServerName 指定的是该服务器的名字,可以部署多台,然后分别命名 webgate1、webgate2、webgate3 … 即可。

ServerAlias 是指定该服务器的别名,也就是我们要代理的站点的名字,为了方便,这里使用了通配符。这样做,以后增加站点时就不需要再修改该配置文件了。

RewriteEngine On 是打开 URL 重写引擎。

RewriteCond 是进行 URL 重写的条件,这里的条件是要访问的主机名与我们代理的主机名匹配。为了便于以后增加站点不需要修改配置文件,这里匹配的主机名也用了批量匹配的方式。

RewriteRule 是把允许代理的请求强制作为代理请求发送,并立即中断重写处理。

到这一步,apache2 就配置完了。剩下的就是关于 DNS 的配置了。

首先给你的 apache2 反向代理在你所管理的 DNS 服务器上配置好它的域名,例如本例中就可以将它配置为 webgate.ujn.edu.cn,这里,可以将多个反向代理服务器配置为这同一个 webgate.ujn.edu.cn 域名,这样便可以由 DNS 来实现负载均衡。

然后,将你要代理的站点的域名在你所管理的 DNS 服务器上配置为指向 webgate.ujn.edu.cn 的别名,这样所有的请求就会都发送到 webgate.ujn.edu.cn 服务器上了。

在 webgate.ujn.edu.cn 上(也就是运行 apache2 的反向代理服务器上),不要设置任何域名服务器,也就是把 /etc/resolv.conf 和 /etc/network/interfaces 中关于域名服务器的设置项删除或者注释掉。

最后修改 /etc/hosts 文件,将你要代理的站点的域名和它的真实地址写到这个文件中,例如:

192.168.1.1    gatetest.ujn.edu.cn     gatetest.ujn6.edu.cn    gatetest.ujn.org.cn     gatetest.ujn.cn

hosts 文件中,一个 IP 可以对应多个域名,都写在一行当中,用空格和 tab 分割即可。但是不可以多个 IP 对应同一个域名,否则只有最开始的那个 IP 跟域名对应关系有效。

也就是说 hosts 文件不支持这种基于域名的负载均衡。

标签: Linux

« 上一篇 | 下一篇 »

只显示10条记录相关文章

发表评论

评论 (必须):