虚拟主机

“虚拟主机”大致上是为 Pyramid 应用程序或 Pyramid 在一个URL空间下的应用程序,它不会“自然”驻留。

Pyramid 提供在URL“前缀”下为应用程序提供服务的工具,以及 部分 A的 traversal 根URL下的基于应用程序。

在URL前缀下托管应用程序

Pyramid 支持一种常见的虚拟主机形式,通过这种形式,您可以承载 Pyramid 作为其他站点的“子集”应用程序(例如,在 http://example.com/mypyramidapplication/ 而不是低于 http://example.com/

如果您使用的是“纯Python”环境,则可以通过 rutter 形成一个“复合”的wsgi应用程序。或者,您可以使用 mod_wsgi 为您的应用程序提供服务,该应用程序为您“在引擎盖下”处理此虚拟主机翻译。

如果您使用 rutter 复合应用程序“在”的前面 Pyramid 应用程序或如果您使用 mod_wsgi 服侍 Pyramid 应用程序中,对于要生成包含前缀的URL,不需要在应用程序中执行任何特殊操作。Rutter和 mod_wsgi 操纵 WSGI 在这样的环境中 PATH_INFOSCRIPT_NAME 变量对于某些给定的前缀是正确的。

下面是一个PasteDeploy配置片段的示例,其中包括 rutter 混合成的。

1
2
3
4
5
6
[app:mypyramidapp]
use = egg:mypyramidapp

[composite:main]
use = egg:rutter#urlmap
/pyramidapp = mypyramidapp

这个“根”是 Pyramid 前缀处的应用程序 /pyramidapp 并在文件中作为“主”应用程序使用组合。

注解

如果使用Apache服务器代理 urlmap 复合,您可能需要使用 ProxyPreserveHost 指示通过原始 HTTP_HOST 头与应用程序一起,以便正确生成URL。在这篇文章中, urlmap 复合材料似乎不尊重 HTTP_X_FORWARDED_HOST 参数,即使在 HTTP_HOST 是不正确的。

如果你使用 mod_wsgi ,您不需要使用 composite 您的应用程序 .ini 文件。这个 WSGIScriptAlias A中的配置设置 mod_wsgi 配置为您工作:

1
WSGIScriptAlias /pyramidapp /Users/chrism/projects/modwsgi/env/pyramid.wsgi

在上面的配置中,我们根目录是 Pyramid 应用于 /pyramidapp 在Apache配置中。

虚拟根支持

Pyramid 还支持“虚拟根”,可用于 traversal 基于(但不是) URL dispatch -基于)应用程序。

当您希望在 Pyramid 资源树作为URL路径名下的应用程序,不包括资源路径本身。例如,您可能希望在遍历路径上为对象提供服务 /cms 作为可通过 http://example.com/ (而不是 http://example.com/cms

要指定虚拟根,请将环境变量插入名为 HTTP_X_VHM_ROOT 其值是资源树中资源对象的绝对路径名,该资源对象应作为“根”资源。因此,遍历机器将在遍历过程中尊重该值(在遍历开始之前将其前置到路径信息),并且 pyramid.request.Request.resource_url() API将生成“正确的”虚拟根URL。

阿帕奇的一个例子 mod_proxy 将承载 /cms 子对象为 http://www.example.com/ 使用该设施如下:

1
2
3
4
5
6
7
8
9
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.example.com
  RewriteEngine On
  RewriteRule ^/(.*) http://127.0.0.1:6543/$1 [L,P]
  ProxyPreserveHost on
  RequestHeader add X-Vhm-Root /cms
</VirtualHost>

注解

使用 RequestHeader 指令要求Apache mod_headers 模块在您使用的Apache环境中可用。

对于一个 Pyramid application running under mod_wsgi ,也可以使用 SetEnv

1
2
3
<Location />
  SetEnv HTTP_X_VHM_ROOT /cms
</Location>

使用基于的应用程序时,设置虚拟根目录没有任何效果 URL dispatch .

进一步的文件和示例

中的API文档 pyramid.traversal 文件A pyramid.traversal.virtual_root() 应用程序编程接口。调用时,它返回虚拟根对象(如果未指定虚拟根,则返回物理根对象)。

运行一个 Pyramid 申请 mod_wsgi 有关于使用的详细信息 mod_wsgi 发球 Pyramid 应用。