Personal tools
You are here: Home 博客群 蜻蜓点水 举重若轻 使用 Apache 代理 Plone
Log in


Forgot your password?
Recent Comments
 还好, (Anonymous User) 2008-08-29
 Trolltech 从一开始就是开源的 (cavendish) 2007-09-26
 Boa 铁杆用户? (Anonymous User) 2007-09-24
 创世纪 (Anonymous User) 2007-05-18
 lihao (Anonymous User) 2007-05-14
 
Document Actions

使用 Apache 代理 Plone 使用 Apache 代理 Plone

Submitted by eishn. on 2007-01-08 00:00. Plone开源系统
有看官就问了

有看官就问了, 你说用 Apache 来发布 Plone 很常见啊, 那么怎么弄来着? 哦, 这里就让我们来轻描淡写一下。

首先, 我们需要确认我们的 Apache 配备有 mod_proxy 和 mod_proxy_http。


通吃编译 Apache Module

通常, 运气很好。我们正在使用的 Apache 已是充分武装的了。比如 mod_rewrite、mod_dav 这些常用的模块都在了。但有时候也有缺席, 比如 mod_proxy。这个时候就得自己编译了。

apxs? 那是扯淡。第一、机器上的 Apache 常常不是你安装的, 我们经常得不到必要的编译环境; 第二、apxs 编译的模块存在有符号失效的情况, 我查了资料, 答案就是下面我所说的正确方法。当然 apxs 并非总是鱼腩, 在所有条件都良好充分的情况下, 也是很曼妙的。

糟糕的情况我已经不止一次碰到过, 我粗心的伙伴常常忘记编译 mod_proxy 和 mod_proxy_http, 并且把编译环境也打扫了。下面就是我的解决方法, 支持各种 Unix 版本和其他操作系统, 不需要 Apache 原始编译环境, 是一种通吃的方案。

    ·首先得到正式机上 Apache 的版本

        bin/httpd -v

    ·从 http://www.apache.org 上下载这个版本

    ·解压缩, 查看 Apache 是否已经自带了你所需的模块

        ./configure --help

其中一堆的 --enable-xxx 表示这份 Apache 发布中已经带有的模块。通常你所需要的就在里面。

    ·编译, 带上你所需要的所有模块

        ./configure --prefix=/home/MYHOME/module-builder --enable-xxx=shared --enable-yyy=shared ...
        make install

事后, 你可以在 /home/MYHOME/module-builder/modules 里面找到你要的东西。

顺便说一下完整的 Proxy 功能需要 --enable-proxy=shared、--enable-proxy-connect=shared、--enable-proxy-ftp=shared、--enable-proxy-http=shared。SSL 模块也是比较常用的。

常规的 HTTP Proxy 需要 --enable-proxy=shared、--enable-proxy-http=shared, 为了方便 mod_rewrite 也是需要的。如果需要正向代理, 还需要 mod_cache (我们这里只需要反向代理)。

第三方模块可以这样加入

    ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared

最后如果发现机器上的 Apache 没有 DSO 支持, 那一定是某些人搞错了, 请通知所有相关人员然后删除这个 Apache 并重建一个。


开通 Apache 的 Proxy 功能

找到你的 httpd.conf 文件, 增加以下内容 (Proxy Cache 部分, 可选, 这里省略):

    LoadModule rewrite_module /PATH/TO/modules/mod_rewrite.so
    LoadModule proxy_module /PATH/TO/modules/mod_proxy.so
    LoadModule proxy_http_module /PATH/TO/modules/mod_proxy_http.so

    ProxyRequests Off
    ProxyVia On

    <Proxy *>
        Order deny,allow
        # Deny from all
        Allow from all
    </Proxy>

这样, Apache Proxy 就可以用了。不过, 我们的 Apache 配置文件也可能是分割成目录来存放的。这样我们就需要改变配置写法了。

进入 Apache 的 etc 目录。通常, 默认是在 /etc/apache2 下。我们可以看到 mods-available 目录。

进入 mods-available 目录, 编辑 proxy.load 文件:

    LoadModule cache_module /PATH/TO/modules/mod_cache.so           # 正向代理, 可选
    LoadModule disk_cache_module /PATH/TO/modules/mod_disk_cache.so # 正向代理, 可选
    LoadModule proxy_module /PATH/TO/modules/mod_proxy.so
    LoadModule proxy_http_module /PATH/TO/modules/mod_proxy_http.so

注意, 在默认情况下, modules 目录在 /usr/lib/apache2/modules 这个位置。

接下来编辑 proxy_http.load:

    LoadModule proxy_http_module /PATH/TO/modules/mod_proxy_http.so

rewrite.load:

    LoadModule rewrite_module /PATH/TO/modules/mod_rewrite.so

最后编辑 proxy.conf 文件 (Proxy Cache 部分, 可选, 这里省略)。

    ProxyRequests Off
    ProxyVia On

    <Proxy *>
        Order deny,allow
        # Deny from all
        Allow from all
    </Proxy>

最后一步, 激活配置:

    a2enmod rewrite
    a2enmod proxy
    a2enmod proxy_http
    /etc/init.d/apache2 reload

Apache Proxy, 搞定!


使用 Apache 代理 Plone

找到我们的 VirtualHost, 先测试一下我们的 Proxy 功能。

    NameVirtualHost: *:80
    <VirtualHost *:80>
        RewriteEngine on
        RewriteRule ^/test/(.*) http://blog.163.com/eishn/$1 [P,L]
    </VirtualHost>

如果能够访问到 Apache /test/ 这个地址, 说明 Proxy 配置正常。如果得到 403 可能是 Proxy 模块没有正常工作, 需要修改 proxy 相关配置。如果得到 404 情况要更复杂一些, 请咨询专业人员。一般而言, 一开始我们都是需要多试几次才能成功的。

现在假定我们的 Apache 被分配到 www.mysite.org 这个域名。本机上有一个 Plone, 他的 HTTP 端口是 8080, 位置是 http://localhost:8080/portal。现在我们要把这个 Plone 发布到 http://www.mysite.org/plone/ 这个地址。那我们的规则可以这样写:

    NameVirtualHost: *:80
    <VirtualHost *:80>
        RewriteEngine on
        RewriteRule ^/plone/(.*) http://localhost:8080/VirtualHostBase/http/www.mysite.org:80/VirtualHostRoot/portal/$1 [P,L]
    </VirtualHost>

老兄,这个地方写的有点“糙”...呵呵

Posted by Anonymous User at 2007-01-22 12:02

如果得到 403 可能是 Proxy 模块没有正常工作, 需要修改 proxy 相关配置。如果得到 404 情况要更复杂一些, 请咨询专业人员。一般而言, 一开始我们都是需要多试几次才能成功的。


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: