重新部署虚拟主机中间件。

repoze.vhm的Python项目详细描述


repoze.vhm自述文件

概述

此包提供了用于执行虚拟 在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 ) 通过中间件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有x86javapath的x64机器上x86java上的java JNI未满足链接错误   java将Pixmap的一部分上传到GPU   图像Java位图RLE8格式   java Android studio谷歌广告崩溃应用程序   java如何创建包含未知数量对象的变量?   Java计算给定int数组的所有可能组合   java JDBC classnotfound异常   httpclient中的java将HttpEntity转换为字符串的最优雅/正确的方法是什么?   如何从Java程序运行nano?   java在安卓中调用自定义类/方法   调用方法和JOptionPane后,允许代码继续执行所需的java计时器或其他想法   关于侦听器的向量Java并发问题   线程池执行器Java线程池   java配置DTO上的Swagger javax验证约束   Java中用于按钮功能的swing操作命令   ServletOutputStream中的java设置状态代码   java打印输入数组的平均值