Python 金字塔调试工具栏通过HTTP而不是HTTPS提供静态内容
但是,在我们的测试服务器上,我们使用的是http://链接,链接指向静态内容(如CSS和JavaScript文件),而其余内容通过HTTPS提供。这会导致混合内容警告,并破坏所有功能。有没有办法强迫它生成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()的每个调用中 为此
我知道可以在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