fragen stichworte

Wie kann nginx den HTTP_AUTHORIZATION-Header an Apache übergeben?

Nginx wird als Reverse-Proxy für einen Apache-Server verwendet, der HTTP-Authentifizierung verwendet. Aus irgendeinem Grund kann ich den HTTP_AUTHORIZATION-Header nicht zu Apache übertragen, er scheint von Nginx herausgefiltert zu werden. Daher können sich keine Anforderungen authentifizieren.

Beachten Sie, dass die Basisauthentifizierung dynamisch ist. Daher möchte ich sie nicht in meiner Nginx-Konfiguration hartcodieren.

Meine Nginx-Konfiguration lautet:

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;
    }
}

Weiß jemand, warum das passiert?

Update - Das Problem war etwas, das ich in meiner ursprünglichen Frage übersehen hatte: mod_wsgi. Bei der hier in Frage stehenden Site handelt es sich um eine Django-Site, und es stellt sich heraus, dass Apache die Auth-Variablen durchlässt. Mod_wsgi filtert sie jedoch heraus.

Die Auflösung ist zu verwenden:

WSGIPassAuthorization On

Weitere Informationen finden Sie unter http://www.arnebrodowski.de/blog/508-Django,-mod_wsgi-and-HTTP-Authentication.html

antworten

Ich bin nicht sicher, ob dies funktioniert, aber fügen Sie Folgendes hinzu:

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;

Wenn das nicht funktioniert, versuchen Sie es auch:

proxy_set_header HTTP_AUTHORIZATION $http_authorization;