我在一个反向代理服务器后面提供我的Django应用程序
互联网-> Nginx -> Gunicorn socket -> Django app
在nginx配置中:
upstream my_server {
server unix:/webapps/my_app/run/gunicorn.sock fail_timeout=0;
}
SSL是在nginx级别使用certbot设置的。views.py
中的request.build_absolute_uri
生成http链接。如何强制生成https链接?
3条答案
按热度按时间oknwwptz1#
默认情况下,Django会忽略所有
X-Forwarded
头文件,基于Django文档。通过设置
USE_X_FORWARDED_HOST = True
和SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
强制读取X-Forwarded-Host
标头。在settings.py
中:oug3syen2#
我在apache2后面使用django,所以我的解决方案是把它放在apache2上。
添加标头模式后:
在django setting.py上:
有了这个,我的build_absolute_uri都是从https开始的
des4xlb03#
在django文档中有一个注解https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpRequest.build_absolute_uri:
Mixing HTTP and HTTPS on the same site is discouraged, therefore build_absolute_uri() will always generate an absolute URI with the same scheme the current request has. If you need to redirect users to HTTPS, it’s best to let your Web server redirect all HTTP traffic to HTTPS.