我正在为某个DRF端点设置分页,它工作得很好-但是当部署在使用HTTPS的服务器上时,下一页和上一页的链接会形成http://
而不是https://
。这会导致浏览器阻止请求下一页/上一页。
我已经仔细检查了初始请求是否使用HTTPS,并且这个问题的第二个答案表明,由于请求是通过HTTPS发送的,所以应该在生成的URL中使用HTTPS。
那个问题的第一个答案也没有帮助-我将X-Forwarded-Proto
行添加到我的nginx配置中并重新加载,但没有效果。
DRF文档提到reverse()应该像基本的Django reverse一样运行,但很明显初始请求是HTTPS,而返回的URL是HTTP。
这里有几张截图显示了初始请求(https://<domain>.com/api/leaderboard/
):
响应包含next: http://<domain>.com/api/leaderboard/?page=2
):
我认为这应该是一个简单的设置,但在搜索了这个站点和DRF站点后仍然找不到任何东西。
这是我的nginx配置:
location / {
# proxy_pass http://127.0.0.1:9900;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
root /opt/app/client/dist;
index index.html index.htm;
}
这个问题包含了一个相当详细的答案,但最终说道URL使用与请求相同的协议来形成,但这似乎在这里不是这种情况。我需要设置Django SECURE_PROXY_SSL_HEADER吗?鉴于它可能存在安全问题的警告,我不确定。