托管金字塔webapps在子路径下

时间:2013-03-25 05:11:24

标签: python hosting pyramid

我们有一个托管设置,我们有一个顶级域名,我们在子路径下托管Web应用程序。例如:

  /projects -> Plone
  /interal -> Tomcat
  etc

在这种情况下,我们需要一种方法来告诉后端的Web应用程序它的基本路径是什么,以便它可以正确地生成其视图和静态内容的链接。对于上面的例子,这很好。

我们刚刚开始使用由女服务员服务的金字塔,但到目前为止我们还没弄清楚如何做到这一点。有没有一种干净的方法在Waitress中配置这个基本路径,或者是否有一个更灵活的应用服务器,我们可以使用它来支持Pyramid?

3 个答案:

答案 0 :(得分:5)

WSGI中的所有内容都与当前请求相关。您只需要正确设置environ(通常由WSGI服务器)。

例如,如果/projects,您的网络应用程序会知道它已安装在子路径request.environ['SCRIPT_NAME'] == '/projects'上。如果您希望应用程序与其挂载点无关,则可以简单地对其进行编码,就像它在/foo/bar处提供视图一样。然后通过一些可以正确改变/projects的中间件在environ上挂载您的应用程序(mod_wsgi和其他一些服务器应该能够自动为您执行此操作)。现在,当传入的网址为/projects/foo/bar environ['SCRIPT_NAME'] == '/projects'environ['PATH_INFO'] == '/foo/bar'时,您的应用可以专注于相对路径。

在金字塔中,这可以归结为你的ini中的一个额外步骤,在那里你将前缀中间件添加到你的WSGI堆栈。中间件会为您改变PATH_INFO中的SCRIPT_NAMEenviron个键。

[app:myapp]
use = egg:myapp

# ...

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /projects

[pipeline:main]
pipeline =
    proxy-prefix
    myapp

答案 1 :(得分:0)

在我的金字塔应用程序中,在.ini配置文件(生产和开发)中,我做了类似的事情:

filter-with = urlprefix

[filter:urlprefix]
use = egg:PasteDeploy#prefix
prefix = /mysubfolder

我认为它可能与迈克尔的答案完成相同;我对金字塔来说还是比较新的,而且我会像你这样的食谱。但最终的结果是它从我的root创建了/ mysubfolder的基本URL,而应用程序的其余部分与此相关。这是在本地pserve下运行的,我认为我的网站主机上有nginix。

答案 2 :(得分:0)

repoze.vhm应该可以正常使用。

如果您想使用虚拟根功能,我认为它不起作用。即,您的代理网络应用( https://hidden.tld/root/ 的子路径应显示为 https://example.com/

为了在外部域的子路径上公开您的应用程序repoze.vhm工作得很好。 IMO最好的事情是,您不需要将任何子路径配置或任何内容放入您的Web应用程序部署中。这允许您将URL更改为代理上的任何内容,甚至可以在多个域名和/或子路径上公开相同的应用程序实例。