[英]Configure nginx/gunicorn django behind a load balancer
我使用本教程设置了一个 nginx/gunicorn 服务器。 这对于本地 docker-compose 文件来说就像一个魅力。 然后我将容器推送到AWS fargate ,并在 nginx 前面设置了一个负载均衡器。 这也有效,但是在尝试登录 django 管理员时出现“CSRF 失败”异常。
这是因为主机、端口和协议没有通过负载均衡器和 nginx 代理从用户请求正确转发到 django gunicorn。
我必须如何配置 nginx 和 django?
我最终得到了这个 nginx 配置,它在负载平衡器和我的本地 docker-compose 配置后面工作,用户直接向 nginx 请求。 rg_
只是我项目的前缀。
# Set proto and port to forwarded value, or to nginx value if
# forwarded value not set
map $http_x_forwarded_proto $rg_forwarded_proto {
default $scheme;
"~^(.*)$" $1;
}
map $http_x_forwarded_port $rg_forwarded_port {
default $remote_port;
"~^(.*)$" $1;
}
# Gunicorn proxy
upstream rg_serve {
server localhost:8100;
}
# Server
server {
listen 8090;
location / {
proxy_pass http://rg_serve;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $rg_forwarded_proto;
proxy_set_header X-Forwarded-Port $rg_forwarded_port;
proxy_set_header X-Forwarded-Host $host:$rg_forwarded_port;
proxy_redirect off;
}
location /static/ {
alias /home/app/rg_serve/web/static_collect/;
}
}
我必须设置
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
在我的 Django 设置中,使其工作。
感觉有点奇怪的是,我必须将端口添加到X-Forwarded-Host
才能使其在 django 中工作。 当我只是不添加它,并将 django 设置设置为
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
是行不通的。 我收到 csrf 异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.