gpt4 book ai didi

django - Amazon ELB + Django HTTPS 问题

转载 作者:行者123 更新时间:2023-12-04 01:56:24 24 4
gpt4 key购买 nike

我一直在搜索 SO,但似乎没有一种解决方案适合我的情况:
我有一个来自 AWS 的 Classic Elastic Load Balancer,将请求传递到我的 Nginx docker 容器,该容器还代理传递到我的 python Gunicorn 容器。

Nginx 配置:

server {
listen 80;
listen [::]:80;
...

if ($http_x_forwarded_proto = 'http') {
return 301 https://$server_name$request_uri;
}

location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Scheme $scheme;
proxy_pass http://app_server;
}
}

在我的 Django 设置中我有:

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = False

问题是,当向端点发出请求时,如果我 print(request.META.get('HTTP_X_FORWARDED_PROTO')) 我得到 http 而不是https。这会导致我的 DRF 自动生成的文档链接在 http 而不是 https 中生成。

我的配置有问题吗?
如何在 ELB 后面强制使用 https?

最佳答案

只需添加

proxy_set_header X-Forwarded-Proto https; 

在你的 nginx 配置中。您的 nginx 将始终使用 https 为客户端提供服务,因为 ELB 配置为接收 https 流量。

另外 $scheme 可能没有工作的原因是因为你的 nginx 仍然在 http 协议(protocol)上而不是 https 协议(protocol)

关于django - Amazon ELB + Django HTTPS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50321502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com