Python 金字塔调试工具栏通过HTTP而不是HTTPS提供静态内容

Python 金字塔调试工具栏通过HTTP而不是HTTPS提供静态内容,python,python-3.x,pyramid,pylons,pyramid-debug-toolbar,Python,Python 3.x,Pyramid,Pylons,Pyramid Debug Toolbar,但是,在我们的测试服务器上,我们使用的是http://链接,链接指向静态内容(如CSS和JavaScript文件),而其余内容通过HTTPS提供。这会导致混合内容警告,并破坏所有功能。有没有办法强迫它生成HTTPS链接 我知道可以在Chrome中启用混合内容,这是可行的,但对于整个QA团队来说,这不是一个可行的解决方案。可能有更好/更简单的方法来实现这一点,但要实现这一点,您可以做一件事,将\u scheme='https'参数添加到request.static\u url()的每个调用中 为此

但是,在我们的测试服务器上,我们使用的是http://链接,链接指向静态内容(如CSS和JavaScript文件),而其余内容通过HTTPS提供。这会导致混合内容警告,并破坏所有功能。有没有办法强迫它生成HTTPS链接


我知道可以在Chrome中启用混合内容,这是可行的,但对于整个QA团队来说,这不是一个可行的解决方案。

可能有更好/更简单的方法来实现这一点,但要实现这一点,您可以做一件事,将
\u scheme='https'
参数添加到
request.static\u url()
的每个调用中

为此,您当然可以编辑pyramid/url.py,但也可以在您的项目中进行编辑:

from pyramid.url import URLMethodsMixin

URLMethodsMixin.static_url_org = URLMethodsMixin.static_url  # backup of original

def https_static_url(self, *args, **kw):
    kw['_scheme'] = 'https'  # add parameter forcing https
    return URLMethodsMixin.static_url_org(self, *args, **kw)  # call backup

URLMethodsMixin.static_url = https_static_url  # replace original with backup
static\u url
的参数类似于。从文件中:

请注意,如果_方案作为https传递,而_端口未被传递,则假定_端口值已作为443传递。同样,如果_方案作为http传递,而_端口未传递,则假定_端口值已作为80传递。若要避免此行为,请在传递_方案时始终显式传递_端口。 设置“\u方案”会自动强制端口443


通常,您通过
X-Forwarded-Proto
HTTP头向web服务器发送使用HTTPS而不是HTTP的信号

来自Nginx的示例:

    proxy_set_header X-Forwarded-Proto $scheme;
但是,这不是标准配置,可能取决于您的web服务器配置。以下是Nginx+uWSGI的完整示例:

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Forwarded-Proto $scheme;

    uwsgi_pass 127.0.0.1:8001;
    uwsgi_param UWSGI_SCHEME https;
    uwsgi_pass_header X_FORWARDED_PROTO;
    uwsgi_pass_header X_REAL_IP;
.

您可以将
url\u scheme
param添加到配置文件中(以 (环境)例如:

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6500
url_scheme = https