Como obter o nginx para passar o cabeçalho HTTP_AUTHORIZATION para o Apache

6

Estou usando o Nginx como um proxy reverso para um servidor Apache que usa HTTP Auth. Por algum motivo, não consigo passar o cabeçalho HTTP_AUTHORIZATION para o Apache, ele parece ser filtrado pelo Nginx. Portanto, nenhuma solicitação pode ser autenticada.

Observe que a autenticação básica é dinâmica, portanto, não quero codificá-la na configuração do nginx.

Minha configuração do nginx é:

server {

    listen   80;
    server_name  example.co.uk ;

    access_log  /var/log/nginx/access.cdk-dev.tangentlabs.co.uk.log;

    gzip on;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_read_timeout 120;

    location / {
            proxy_pass http://localhost:81/;
    }

    location ~* \.(jpg|png|gif|jpeg|js|css|mp3|wav|swf|mov|doc|xls|ppt|docx|pptx|xlsx|swf)$ {
    if (!-f $request_filename) {
        break;
                proxy_pass http://localhost:81;
    }

            root /var/www/example;
    }
}

Alguém sabe por que isso está acontecendo?

Atualização - acontece que o problema era algo que eu tinha esquecido em minha pergunta original: mod_wsgi. O site em questão aqui é um site do Django, e acontece que o Apache obtém as variáveis de autenticação passadas, no entanto mod_wsgi as filtra.

A resolução é usar:

WSGIPassAuthorization On

Consulte o link para obter mais detalhes

    
por codeinthehole 09.05.2011 / 12:28

1 resposta

2

Não tenho certeza se isso funcionará, mas tente adicionar isso:

proxy_pass_request_headers on;
proxy_no_cache $cookie_nocache  $arg_nocache$arg_comment;
proxy_no_cache $http_pragma     $http_authorization;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;

Se isso não funcionar, tente também:

proxy_set_header HTTP_AUTHORIZATION $http_authorization;
    
por 09.05.2011 / 12:53