如何让request.route_url使用金字塔吐出https链接而不是http?

Jer*_*y T 2 python https pyramid

我在pyramid框架上有一个应用程序,我request.route_url随处可见.我刚刚将我的应用程序切换到HTTPS,并且所有链接仍然以HTTP形式出现.

是否有一个全局设置我可以放在某个配置文件中,这将改变我的整个应用程序,或者我可以传递给这个函数的参数,它将给我一个HTTPS URL或最好是//不可知的URL( //)?

Mic*_*kel 6

如果WSGI服务器没有告诉应用程序传入的URL是HTTPS,则会错误配置它.这几乎总是因为你是一个反向代理(比如nginx),它使用HTTP与WSGI服务器通信,而没有正确地与原始请求为HTTPS 的WSGI服务器通信.

如果使用nginx/waitress/gunicorn/...等(您的代理和您的wsgi服务器)request.route_url正确配置了所有内容,那么将发出正确的URL.修复不在金字塔本身.

以下是该问题的一些文档.这里的一些解决方案特定于女服务员,但其中一些更通用(前缀中间件),并将在任何地方工作.如果你不使用女服务员,Gunicorn和其他WSGI服务器也有自己特定的处理方法.

http://docs.pylonsproject.org/projects/waitress/en/latest/#using-behind-a-reverse-proxy

  • 在这种情况下,heroku充当代理。从我上面的链接中,应该清楚发生了什么事情-您需要在栈中适当设置“ environ ['wsgi.url_scheme'] ='https'`的东西。有很多方法可以做到这一点。例如,如果您确定每个请求都通过ssl,则只需在ini文件的[server:main]部分中设置`url_scheme = https`。 (2认同)