我在nginx后面有一个金字塔应用代理,我试图在SCRIPT_NAME
中设置request.environ
。
我试过了:
pserve
中导出它正在nginx
中导出它正在gevent.wsgi.WSGIServer.environ
serve_forever()
上手动设置
我在最后一步中定义的非标准值是可用的,但SCRIPT_NAME
始终为空,这似乎表明它已被其他地方覆盖。
我该如何设置?
答案 0 :(得分:1)
看看repoze.vhm。
它通常可以解决我所有的虚拟主机问题。 (子路径,虚拟根等...)。 repoze.vhm的最大优点是,您的金字塔应用程序可以完全不知道外部URL和路径。你必须要小心,在为你的网站/应用程序生成网址时使用request.route_url和其他方法(但这无论如何都应该是好的做法)。
答案 1 :(得分:0)
SCRIPT_NAME
由WSGI服务器基于每个请求设置。如果您的服务器没有设置它的挂钩(女服务员有url_prefix=...
设置),那么您可以轻松地在中间件堆栈中添加一个中间件,为您设置它。您也可以使用粘贴前缀中间件来添加SCRIPT_NAME
,而不是编写自己的自定义中间件。它还支持通过翻译wsgi.url_scheme
标题来覆盖X-Forwarded-Proto
,这有助于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