在Pyramid中通过https提供静态文件服务

3
我希望通过request.static_url('some_file')在Pyramids中提供静态文件。由于有几个服务,我的模板包含以下代码行:
<script type="text/javascript" src="${request.static_url('dbas:static/first')}"></script>
<script type="text/javascript" src="${request.static_url('websocket:static/second')}"></script>

但是遗憾的是, static_url() 方法只能提供 http 协议的链接,但我需要 https。我该怎么做才能实现这个需求呢?
谢谢!

请查看这个Stack Overflow的问题:https://dev59.com/75nga4cB1Zd3GeqPgfxY - fat fantasma
谢谢,但我不想通过https进行每个调用: - Tobias S
3个回答

6
您可以在配置文件中添加url_scheme参数(按环境分离),如下所示:
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6500
url_scheme = https

不确定为什么这个被踩了,它是正确的,根据这里的WSGI文档:https://wsgi.readthedocs.io/en/latest/definitions.html#wsgi-environ-keys - Jonno_FTW
是的@Jonno_FTW,我也不知道为什么它被踩了。 - Hiago Hubert
谢谢!这正是我需要的 https://dev59.com/75nga4cB1Zd3GeqPgfxY#61370594! - Yann Dìnendal

1

但是在开发中我使用的是http,在生产中使用https。 - Tobias S
3
您可以传递在您的 setup.ini 中定义的环境变量(例如 development.ini 和 production.ini),比如 myproject.scheme = http,并将其传递给模板,使其具有动态性,如(settings.get('myproject.scheme', 'http'))。 - Antonio Beamud

0

我知道这个问题很旧,但是因为我在这方面遇到了一些困难,所以我想我可以提供一些信息。

在以下场景中:

1- 反向代理 -> 2- 运行Pyramid应用的服务 -> 3- Pyramid应用代码

3- Pyramid使用request.environ['wsgi.url_scheme']生成URL。

2- 运行应用的服务应该设置wsgi_url_scheme。例如,如果反向代理设置了X-Forwarded-Proto并且反向代理IP在forwarded_allow_ips中列出,则Gunicorn会设置此属性。

1- 反向代理应该设置X-Forwarded-Proto头部。

对于gunicorn + nginx的情况:

对于nginx,在SSL部分添加以下内容来设置头部:

proxy_set_header X-Forwarded-Proto https;

对于gunicorn,nginx反向代理的IP地址应该在命令行中指定,如docs中所述。

gunicorn -b 0.0.0.0:8080 --workers=4 --timeout=60 --paster /config/myapp.ini --forwarded-allow-ips 1.2.3.4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接