【发布时间】:2016-12-18 21:44:31
【问题描述】:
我在pyramid 框架上有一个应用程序,我到处都在调用request.route_url。我刚刚将我的应用程序切换到 HTTPS,并且所有链接仍然以 HTTP 的形式出现。
我是否可以在某个配置文件中放置一个全局设置来更改我的整个应用程序的设置,或者是否有一个参数我可以传递给这个函数,它会给我一个 HTTPS URL,或者最好是一个 //不可知的 URL (//)?
【问题讨论】:
我在pyramid 框架上有一个应用程序,我到处都在调用request.route_url。我刚刚将我的应用程序切换到 HTTPS,并且所有链接仍然以 HTTP 的形式出现。
我是否可以在某个配置文件中放置一个全局设置来更改我的整个应用程序的设置,或者是否有一个参数我可以传递给这个函数,它会给我一个 HTTPS URL,或者最好是一个 //不可知的 URL (//)?
【问题讨论】:
如果您的 WSGI 服务器没有告诉应用程序传入的 url 是 HTTPS,则它是错误配置的。这几乎总是因为您在使用 HTTP 与 WSGI 服务器通信的反向代理(如 nginx)后面,并且没有正确地与 原始 请求是 HTTPS 的 WSGI 服务器通信。
IF 使用 nginx / waitress / gunicorn / ... 等(您的代理和 wsgi 服务器)正确配置所有内容,然后request.route_url 将发出正确的 URL。修复不在 Pyramid 本身内。
这里是有关该问题的一些文档。这里的一些解决方案是特定于女服务员的,但其中一些更通用(前缀中间件)并且可以在任何地方工作。如果您不使用女服务员,Gunicorn 和其他 WSGI 服务器也有自己特定的处理方式。
https://docs.pylonsproject.org/projects/waitress/en/latest/reverse-proxy.html
【讨论】:
environ['wsgi.url_scheme'] = 'https' 的 something 。有很多方法可以做到这一点。例如,如果您确定每个请求都通过 ssl,那么只需在 ini 文件的 [server:main] 部分设置 url_scheme = https。
你想要的是route_path,它返回以/开头的URL,没有方案、域和端口(路径)。
【讨论】: