虚拟主机¶
“虚拟主机”大致上是为 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_INFO
和 SCRIPT_NAME
变量对于某些给定的前缀是正确的。
下面是一个PasteDeploy配置片段的示例,其中包括 rutter
混合成的。
1[app:mypyramidapp]
2use = egg:mypyramidapp
3
4[composite:main]
5use = egg:rutter#urlmap
6/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 配置为您工作:
1WSGIScriptAlias /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/
使用该设施如下:
1NameVirtualHost *:80
2
3<VirtualHost *:80>
4 ServerName www.example.com
5 RewriteEngine On
6 RewriteRule ^/(.*) http://127.0.0.1:6543/$1 [L,P]
7 ProxyPreserveHost on
8 RequestHeader add X-Vhm-Root /cms
9</VirtualHost>
备注
使用 RequestHeader
指令要求Apache mod_headers 模块在您使用的Apache环境中可用。
对于一个 Pyramid application running under mod_wsgi ,也可以使用 SetEnv
:
1<Location />
2 SetEnv HTTP_X_VHM_ROOT /cms
3</Location>
使用基于的应用程序时,设置虚拟根目录没有任何效果 URL dispatch .
进一步的文件和示例¶
中的API文档 pyramid.traversal 文件A pyramid.traversal.virtual_root()
应用程序编程接口。调用时,它返回虚拟根对象(如果未指定虚拟根,则返回物理根对象)。
运行一个 Pyramid 申请 mod_wsgi 有关于使用的详细信息 mod_wsgi 发球 Pyramid 应用。