Proxy reverso Nginx para gunicorn - problema ao passar credenciais básicas de autenticação para o servidor

3

Eu configurei o nginx como um proxy reverso do gunicorn para um site do django rodando no Heroku. Estou usando o Anymail para minha lista de e-mail e ele precisa receber credenciais de autenticação básicas para webhooks (na verdade, não preciso configurar a autenticação básica, só preciso passar o cabeçalho com as credenciais).

Não consigo passar as credenciais para o servidor.

O mais estranho é que isso funciona e eu posso acessar o cabeçalho HTTP_AUTHORIZATION no Django, que tem o valor "test", como esperado:

proxy_set_header Authorization "test"; 

Mas isso não funciona, e nenhum cabeçalho HTTP_AUTHORIZATION é encontrado pelo Django:

proxy_set_header Authorization $http_authorization; 

Aqui está o meu nginx.conf.erb :

daemon off;
#Heroku dynos have at least 4 cores.
worker_processes <%= ENV['NGINX_WORKERS'] || 4 %>;

events {
    use epoll;
    accept_mutex on;
    worker_connections 1024;
}

http {

    server_tokens off;

    include mime.types;
    default_type application/octet-stream;

    #Must read the body in 5 seconds.
    client_body_timeout 5;

    upstream app_server {
        server unix:/tmp/nginx.socket fail_timeout=0;
    }

    server {
        listen <%= ENV["PORT"] %>;

        server_name example.com "";

        keepalive_timeout 5;

        location / {

            proxy_set_header Host $host;
            proxy_pass http://app_server;

        }

        location /authtest {

            proxy_set_header Host $host;
            proxy_pass http://app_server;

            # this doesn't work - no HTTP_AUTHORIZATION header found by Django
            #proxy_set_header Authorization $http_authorization; 

            # this does work and returns the value "test" for the HTTP_AUTHORIZATION header 
            proxy_set_header Authorization "test"; 

            # tested enabling and disabling these, they don't appear to make a difference
            #proxy_pass_header Authorization; 
            #proxy_set_header X-Forwarded-User $remote_user;

        }

    }
}
    
por looeee 04.08.2018 / 16:51

1 resposta

0

OK, encontrei o problema - testei isso no Chrome e no Firefox digitando foo:[email protected]/authtest na barra de URL.

Acontece que, recentemente, esses navegadores começaram a remover as credenciais silenciosamente, a menos que haja uma autenticação básica na página. Como eu só quero passar a credencial para o Django, não há autenticação básica na página, então eles foram removidos.

Teste com link e defina o cabeçalho explicitamente, e as credenciais são transmitidas corretamente.

    
por 04.08.2018 / 21:54