重新部署虚拟主机中间件。
repoze.vhm的Python项目详细描述
repoze.vhm自述文件
内容
- repoze.vhm readme
-
repoze.vhm changelog
- 0.14(2012-03-24)
- 0.13(2010-04-18)
- 0.12(2010-01-01)
- 0.11(2009-08-31)
- 0.10(2009-08-26)
- 0.9(2009-07-09)
- 0.8(2009-01-10)
- 0.7(2008-05-07)
- 0.6(2008-04-17)
- 0.5(2008-03-09)
- 0.4(2008-03-09)
- 0.3(2007-10-25)
- 0.2(2007-09-22)
- 0.1(2007-09-21)
概述
此包提供了用于执行虚拟 在wsgi/repoze环境中托管。它特别有用 在一个可以用作 替代经典的方法 虚拟主机。
简而言之,虚拟主机
"虚拟主机"支持从 在更大的url命名空间中,独立于 用于为应用程序服务的脚本文件,或精确的布局 应用程序中的对象。特别是申请和 服务器协作为应用程序中的链接生成url, 使链接保留 应用程序。
最简单的情况不需要任何努力:链接呈现为 页面内的相对路径工作良好。然而,这种联系 很快就会出现问题,例如当页面用作 其文件夹的默认索引视图,并且URL不以 / 。在这种情况下,浏览器将解释与 文件夹的父文件夹,将导致混乱。
cgi环境变量
用于运行"内部"apache的应用程序(例如,使用 修改python以下是我们感兴趣的环境变量 进行虚拟托管时:
服务器名
< Buff行情> 服务器认为它拥有的名称。http_主机
< Buff行情> 服务器的明显主机名(即在 主机: 中传递的主机名) 页眉)服务器端口
< Buff行情> 服务器的明显端口脚本名称
< Buff行情> apache用来分派到应用程序的任何路径前缀(如 通过 scriptalias 指令定义。路径信息
< Buff行情> 路径的其余部分,在移除 发货。repoze.vhm vhm xheaders wsgi filter
当配置为wsgi中间件时,此筛选器将转换路径 从添加到 请求输入上述"标准"CGI环境变量。 它还将repoze.vhm特定的环境变量放入 供repoze.zope2(或其他人)使用的wsgi环境 选择使用其服务的应用程序)。
如果这个过滤器放在Zope 2前面的管道中 应用程序,标准的虚拟主机Monster对象 ( /virtual_hosting )可能会被删除,因为它不再是必需的。 但是,它不需要删除;repoze.vhm如果是 现在.
过滤器不需要配置;它可以添加到任何管道 通过它的egg名称: egg:repoze.vhm
repoze.vhm vhm_explicit wsgi filter
这个过滤器类似于repoze.vhm-vhm-xheaders过滤器,但不是 来自环境的虚拟主机和/或根,它们是显式的 在实例化中间件时配置。
如果使用paste.deploy,则如下所示:
[filter:vhm] use = egg:repoze.vhm#vhm_explicit host = http://www.example.com root = /mysite
"host"和"root"都是可选的,但您可能希望在 至少一个。
repoze.vhm vhm_path wsgi filter
作为无法向代理添加头的代理的回退 请求,此筛选器实现相同的基于路径的虚拟主机 zope2虚拟主机怪物使用的语法。因为这个语法是 相当神秘(以至于有一个web应用程序可以生成 重写规则!),建议不要使用此筛选器,除非 无法配置为添加头的环境(例如,apache 已启用mod_rewrite,但不能更改为启用 模块标题 )。
当配置为wsgi中间件时,此筛选器将转换路径 "zope2虚拟主机"中的环境信息 在"标准"cgi环境变量中插入"mugned url" 上面。它还将放置repoze.vhm特定的环境变量 进入wsgi环境供repoze.zope2(或其他 选择使用其服务的应用程序)。
如果这个过滤器放在Zope 2前面的管道中 应用程序,标准的虚拟主机Monster对象 ( /virtual_hosting )可能会被删除,因为它不再是必需的。 但是,它不需要删除;repoze.vhm如果是 现在.
过滤器不需要配置;它可以添加到任何管道 通过它的egg名称: egg:repoze.vhm\vhm路径
如果只想触摸主机和端口位,可以设置 保存路径信息 参数。
[filter:vhm] use = egg:repoze.vhm#vhm_path conserve_path_infos = true
这个技巧对于将url按原样转发到底层设备并触摸uri非常有用。例如,一个wsgi管道,我们的repoze.vhm从一个存储zope2服务器中过滤一些内容,这个服务器也可以独立完成vhm的工作。
a href="id22" rel="nofollow">示例:一个传递中间件过滤掉一个stock zope2+plone服务器
在这个设置中,我们有一个前端apache服务器反向代理一个传递服务器。
首先,我们将告诉apache将我们的请求代理到后端。
阿帕奇会告诉我们:
< Buff行情>- 在wsgi级别,使用请求头中的内容重写链接
- 在zope2级别,使用带有vhmonter的url重写链接。
# Rewrite links in paste RequestHeader add X-Vhm-Host http://host.tld:80/ # /_themes & .deliverance -> deliverance ProxyPassMatch /(_themes|\.deliverance)(.*) http://localhost:8378/$1$2 ProxyPassReverse /_themes/ http://localhost:8378/_themes/ ProxyPassReverse /.deliverance/ http://localhost:8378/.deliverance/ # application mounted on / does not needs _vh_ # /zmiroot -> access to zmi ProxyPassMatch ^/zmiroot(.*) http://localhost:8381/VirtualHostBase/http/host.tld:80/VirtualHostRoot/_vh_zmiroot$1 ProxyPassReverse ^/zmiroot/ http://localhost:8381/VirtualHostBase/http/host.tld:80/VirtualHostRoot/_vh_zmiroot/ # /plone-plonesiteid-> vhmonster without deliverance filtering ProxyPassMatch ^/plone-plonesiteid(.*) http://localhost:8381/VirtualHostBase/http/host.tld:80/plonesiteid/VirtualHostRoot/_vh_plone-plonesiteid$1 ProxyPassReverse ^/plone-plonesiteid/ http://localhost:8381/VirtualHostBase/http/host.tld:80/plonesiteid/VirtualHostRoot/_vh_plone-plonesiteid/ # /-> zope2vhmonster ProxyPass / http://localhost:8378/VirtualHostBase/http/host.tld:80/plonesiteid/VirtualHostRoot/ ProxyPassReverse / http://localhost:8378/VirtualHostBase/http/host.tld:80/plonesiteid/VirtualHostRoot/
这个deliverance服务器只是另一个pastedeploy设置,它以某种方式查询某个地方正在监听的zope2服务器。
[DEFAULT] debug=false [app:athemes] use = egg:Paste#static document_root=%(here)s/sometheme/path [app:azopeproxy] use = egg:Paste#proxy address=http://ZOPE:8381/ [filter:fdeliverance] use=egg:Deliverance theme_uri = sometheme rule_uri = file://somerules execute_pyref=true [filter:ftranslogger] use=egg:Paste#translogger setup_console_handler=true [filter:fexc] use=egg:WebError#evalerror [filter:fvhm] use = egg:repoze.vhm#vhm_xheaders [pipeline:pmain] pipeline = fexc ftranslogger fvhm fdeliverance azopeproxy [composite:main] use = egg:Paste#urlmap / = pmain /_themes = athemes [server:main] use=egg:Paste#http host = localhost port = 8378
repoze.vhm虚拟主机模型
此模型(基于Ian Bicking的建议a ), 将虚拟主机信息从代理服务器/web服务器传递到 通过向代理请求添加额外的头来应用程序:
Http_x_vhm_主机
< Buff行情> 指示应用程序根的明显url前缀 (连接wsgi.url_scheme , 服务器名 , 服务器端口和脚本名变量;相当于 Zope2的 服务器url )。http_x_vhm_根目录
< Buff行情> 应用程序中对象的路径 充当"虚拟根"。当通过mod_wsgi从"内部"apache提供应用程序时,我们可以 直接设置环境:
<Directory /path/to/wsgiapp> SetEnv HTTP_X_VHM_HOST http://www.example.com SetEnv HTTP_X_VHM_ROOT /cms </Directory>
如果通过代理重写规则提供repoze.zope2,则可以通过 通过添加其他标题来获取此信息。例如,一个apache示例 上述示例的配置可能是:
<VirtualHost *:80> ServerName www.example.com RewriteEngine on RewriteRule ^/(.*) http://localhost:8080/$1 [P,L] RequestHeader add X-Vhm-Host http://www.example.com RequestHeader add X-Vhm-Root /cms </VirtualHost>
在以上任一示例中,当 repoze.vhm的过滤器在wsgi管道中是相同的:明显的 http://www.example.com的根目录将是 物理路径为 /cms 的对象。另外,在 zope生成的url不会以 /cms 开头,并且方案 URL中的主机名将是" http://www.example.com ",而不是 http://localhost:8080
"vhm主机"报头可以包含进一步的路径信息,如 必要;进一步的路径信息可以 repoze.zope2)受到下游应用程序的尊重,以根 非服务器根路径上的应用程序
<Directory /path/to/wsgiapp> SetEnv HTTP_X_VHM_HOST http://www.example.com/further/path SetEnv HTTP_X_VHM_ROOT /cms </Directory>
在本例中,zope生成的url将以 http://www.example.com/further/path 。此语法替换 "inside out"虚拟主机语法( \uvh 段标记 url)如"虚拟主机怪物"文档中所述。
"VHM主机"和"VHM根"报头可以独立使用( 系统将如您所期望的那样在没有一个或 其他)
repoze.vhm 库API
因为现有的zope 2虚拟主机不依赖于 对于"标准"cgi变量,应用程序调度器需要"修复 向上"的环境,以符合佐佩的期望。 休止符.vhm 提供以下功能以帮助解决此问题:
repoze.vhm.utils.setserverurl
< Buff行情> 将标准cgi虚拟主机环境转换为 zope2需要(添加 服务器url 键)。repoze.vhm.utils.getvirtualroot
< Buff行情> 按设置返回虚拟根路径( repoze.vhm.virtual\u root ) 通过中间件。