金字塔:如何在请求环境

2024-04-29 13:05:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在nginx后面代理了一个金字塔应用程序,我试图在request.environ中设置SCRIPT_NAME。在

我试过:

  • 在shell中导出它pserve正在运行
  • 在shell中导出它nginx正在运行
  • 在金字塔配置文件中定义它
  • serve_forever()之前手动将其设置为gevent.wsgi.WSGIServer.environ

我在上一步中定义的非标准值是可用的,但是SCRIPT_NAME总是空的,这似乎表明它正在从其他地方被覆盖。在

我怎么设置?在


Tags: name应用程序代理定义request配置文件environscript
2条回答

看看休息室.vhm. 在

它通常能解决我所有的虚拟主机问题。(子路径、虚拟根目录等)。最大的优势休息室.vhm你的金字塔应用程序可以完全不知道外部url和路径。但是你必须小心,你使用request.route\u网址以及为你的站点/应用程序生成url时使用的其他方法(但无论如何,这应该是一个很好的实践)。在

https://github.com/repoze/repoze.vhm

SCRIPT_NAME由WSGI服务器根据每个请求设置。如果您的服务器没有钩子来设置它(waitress有一个url_prefix=...设置),那么您可以很容易地在中间件堆栈的停止处添加一个中间件来为您设置它。除了编写自己的自定义中间件之外,还可以使用粘贴前缀中间件,它允许您附加到SCRIPT_NAME。它还支持通过转换X-Forwarded-Proto头来重写wsgi.url_scheme,这将有助于https。在

使用中间件的最佳方法是将其添加到ini文件中。服务员文档中有一些很好的例子。为了更清楚起见,我将复制下面的一个。[1]

[app:myapp]
use = egg:mypackage#myapp

[filter:paste_prefix]
use = egg:PasteDeploy#prefix

[pipeline:main]
pipeline =
    paste_prefix
    myapp

[server:main]
use = egg:waitress#main
listen = 127.0.0.1:8080

http://docs.pylonsproject.org/projects/waitress/en/latest/#using-behind-a-reverse-proxy

相关问题 更多 >