Обратный прокси Nginx для gunicorn - проблема с передачей базовых учетных данных на сервер

Я настроил nginx как обратный прокси-сервер для Gunicorn для сайта django, работающего на Heroku. Я использую Anymail для своего списка рассылки, и он должен получать базовые учетные данные для веб-перехватчиков (на самом деле мне не нужно настраивать базовую аутентификацию, мне просто нужно передать заголовок с учетными данными).

Я могу Кажется, что учетные данные не передаются серверу.

Странно то, что это работает, и я могу получить доступ к заголовку HTTP_AUTHORIZATION в Django, который, как и ожидалось, имеет значение «test»:

proxy_set_header Authorization "test"; 

Но это не работает, и нет Заголовок HTTP_AUTHORIZATION обнаружен Django:

proxy_set_header Authorization $http_authorization; 

Вот мой 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;

        }

    }
}
3
задан 4 August 2018 в 17:51
1 ответ

Хорошо, я обнаружил проблему - я тестировал ее в Chrome и Firefox, набрав (скрыто) в строке URL.

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

Тестирование с помощью https://httpstatus.io/ и явная установка заголовка, и учетные данные передаются правильно.

0
ответ дан 3 December 2019 в 07:50

Теги

Похожие вопросы