Назад | Перейти на главную страницу

Как заставить nginx передавать заголовок HTTP_AUTHORIZATION в Apache

Я использую Nginx в качестве обратного прокси для сервера Apache, который использует HTTP Auth. По какой-то причине я не могу передать заголовок HTTP_AUTHORIZATION в Apache, похоже, он отфильтровывается Nginx. Следовательно, никакие запросы не могут пройти аутентификацию.

Обратите внимание, что базовая аутентификация является динамической, поэтому я не хочу жестко кодировать ее в своей конфигурации nginx.

Моя конфигурация 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;
    }
}

Кто-нибудь знает, почему это происходит?

Обновить - оказывается, проблема была в том, что я упустил из виду в своем первоначальном вопросе: mod_wsgi. Рассматриваемый здесь сайт является сайтом Django, и оказывается, что Apache действительно пропускает переменные аутентификации, однако mod_wsgi их отфильтровывает.

Разрешение использовать:

WSGIPassAuthorization On

Видеть http://www.arnebrodowski.de/blog/508-Django,-mod_wsgi-and-HTTP-Authentication.html Больше подробностей

Я не уверен, что это сработает, но попробуйте добавить это:

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;

Если это не сработает, попробуйте и это:

proxy_set_header HTTP_AUTHORIZATION $http_authorization;