我在DigitalOcean VPS上运行Django项目,使用Nginx和Gunicorn,我确定我使用的是HTTPS,但由于某种原因,使用request.is_secure()
总是返回False
,request.scheme
返回HTTP,即使我确定它是VPS。
这可能是什么原因呢?下面是我的nginx配置:
server {
listen 80;
server_name MY.SERVER.com;
location / {
include proxy_params;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/var/www/proj/myproj.sock;
}
}
而且我还确保添加到我的Django设置SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
。任何建议都是感激的
1条答案
按热度按时间3pvhb19x1#
我遇到了同样的问题。而且,看起来,我找到了为什么它不能像预期的那样工作。
根据文档,
$scheme
等于http
或https
。对于
location
,它在server
中声明,监听80
端口,我们得到$scheme
等于http
.然后,AFAIU,Django接收到HTTP_X_FORWARDED_PROTO
报头,等于http
,Django将其视为不安全(即request.is_secure()
总是返回False
)。好吧,至少,当我做了以下更改时,它开始工作得很好: