使用 Apache 代理 Plone
有看官就问了<br /><br />有看官就问了, 你说用 Apache 来发布 Plone 很常见啊, 那么怎么弄来着? 哦, 这里就让我们来轻描淡写一下。<br /><br />首先, 我们需要确认我们的 Apache 配备有 mod_proxy 和 mod_proxy_http。<br /><br /><br />通吃编译 Apache Module<br /><br />通常, 运气很好。我们正在使用的 Apache 已是充分武装的了。比如 mod_rewrite、mod_dav 这些常用的模块都在了。但有时候也有缺席, 比如 mod_proxy。这个时候就得自己编译了。<br /><br />apxs? 那是扯淡。第一、机器上的 Apache 常常不是你安装的, 我们经常得不到必要的编译环境; 第二、apxs 编译的模块存在有符号失效的情况, 我查了资料, 答案就是下面我所说的正确方法。当然 apxs 并非总是鱼腩, 在所有条件都良好充分的情况下, 也是很曼妙的。<br /><br />糟糕的情况我已经不止一次碰到过, 我粗心的伙伴常常忘记编译 mod_proxy 和 mod_proxy_http, 并且把编译环境也打扫了。下面就是我的解决方法, 支持各种 Unix 版本和其他操作系统, 不需要 Apache 原始编译环境, 是一种通吃的方案。<br /><br /> ·首先得到正式机上 Apache 的版本<br /><br /> bin/httpd -v<br /><br /> ·从 http://www.apache.org 上下载这个版本<br /><br /> ·解压缩, 查看 Apache 是否已经自带了你所需的模块<br /><br /> ./configure --help<br /><br />其中一堆的 --enable-xxx 表示这份 Apache 发布中已经带有的模块。通常你所需要的就在里面。<br /><br /> ·编译, 带上你所需要的所有模块<br /><br /> ./configure --prefix=/home/MYHOME/module-builder --enable-xxx=shared --enable-yyy=shared ...<br /> make install<br /><br />事后, 你可以在 /home/MYHOME/module-builder/modules 里面找到你要的东西。<br /><br />顺便说一下完整的 Proxy 功能需要 --enable-proxy=shared、--enable-proxy-connect=shared、--enable-proxy-ftp=shared、--enable-proxy-http=shared。SSL 模块也是比较常用的。<br /><br />常规的 HTTP Proxy 需要 --enable-proxy=shared、--enable-proxy-http=shared, 为了方便 mod_rewrite 也是需要的。如果需要正向代理, 还需要 mod_cache (我们这里只需要反向代理)。<br /><br />第三方模块可以这样加入<br /><br /> ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared<br /><br />最后如果发现机器上的 Apache 没有 DSO 支持, 那一定是某些人搞错了, 请通知所有相关人员然后删除这个 Apache 并重建一个。<br /><br /><br />开通 Apache 的 Proxy 功能<br /><br />找到你的 httpd.conf 文件, 增加以下内容 (Proxy Cache 部分, 可选, 这里省略):<br /><br /> LoadModule rewrite_module /PATH/TO/modules/mod_rewrite.so<br /> LoadModule proxy_module /PATH/TO/modules/mod_proxy.so<br /> LoadModule proxy_http_module /PATH/TO/modules/mod_proxy_http.so<br /><br /> ProxyRequests Off<br /> ProxyVia On<br /><br /> <Proxy ><br /> Order deny,allow<br /> # Deny from all<br /> Allow from all<br /> </Proxy><br /><br />这样, Apache Proxy 就可以用了。不过, 我们的 Apache 配置文件也可能是分割成目录来存放的。这样我们就需要改变配置写法了。<br /><br />进入 Apache 的 etc 目录。通常, 默认是在 /etc/apache2 下。我们可以看到 mods-available 目录。<br /><br />进入 mods-available 目录, 编辑 proxy.load 文件:<br /><br /> LoadModule cache_module /PATH/TO/modules/mod_cache.so # 正向代理, 可选<br /> LoadModule disk_cache_module /PATH/TO/modules/mod_disk_cache.so # 正向代理, 可选<br /> LoadModule proxy_module /PATH/TO/modules/mod_proxy.so<br /> LoadModule proxy_http_module /PATH/TO/modules/mod_proxy_http.so<br /><br />注意, 在默认情况下, modules 目录在 /usr/lib/apache2/modules 这个位置。<br /><br />接下来编辑 proxy_http.load:<br /><br /> LoadModule proxy_http_module /PATH/TO/modules/mod_proxy_http.so<br /><br />rewrite.load:<br /><br /> LoadModule rewrite_module /PATH/TO/modules/mod_rewrite.so<br /><br />最后编辑 proxy.conf 文件 (Proxy Cache 部分, 可选, 这里省略)。<br /><br /> ProxyRequests Off<br /> ProxyVia On<br /><br /> <Proxy *><br /> Order deny,allow<br /> # Deny from all<br /> Allow from all<br /> </Proxy><br /><br />最后一步, 激活配置:<br /><br /> a2enmod rewrite<br /> a2enmod proxy<br /> a2enmod proxy_http<br /> /etc/init.d/apache2 reload<br /><br />Apache Proxy, 搞定!<br /><br /><br />使用 Apache 代理 Plone<br /><br />找到我们的 VirtualHost, 先测试一下我们的 Proxy 功能。<br /><br /> NameVirtualHost: *:80<br /> <VirtualHost *:80><br /> RewriteEngine on<br /> RewriteRule ^/test/(.) http://blog.163.com/eishn/$1 [P,L]<br /> </VirtualHost><br /><br />如果能够访问到 Apache /test/ 这个地址, 说明 Proxy 配置正常。如果得到 403 可能是 Proxy 模块没有正常工作, 需要修改 proxy 相关配置。如果得到 404 情况要更复杂一些, 请咨询专业人员。一般而言, 一开始我们都是需要多试几次才能成功的。<br /><br />现在假定我们的 Apache 被分配到 www.mysite.org 这个域名。本机上有一个 Plone, 他的 HTTP 端口是 8080, 位置是 http://localhost:8080/portal。现在我们要把这个 Plone 发布到 http://www.mysite.org/plone/ 这个地址。那我们的规则可以这样写:<br /><br /> NameVirtualHost: :80<br /> <VirtualHost *:80><br /> RewriteEngine on<br /> RewriteRule ^/plone/(.) http://localhost:8080/VirtualHostBase/http/www.mysite.org:80/VirtualHostRoot/portal/$1 [P,L]<br /> </VirtualHost><br />

图片