繁体   English   中英

在负载均衡器后面配置 nginx/gunicorn django

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM