注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蜻蜓点水 举重若轻

君子终日乾乾

 
 
 

日志

 
 

使用 Apache 代理 Plone  

2006-11-24 13:16:37|  分类: 其他技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有看官就问了

有看官就问了, 你说用 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>
  评论这张
 
阅读(1977)| 评论(7)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017