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

Как использовать nginx для прокси-сервера на хост, требующий аутентификации?

Как я могу настроить директиву nginx proxy_pass, которая также будет включать информацию об аутентификации HTTP Basic, отправляемую на прокси-хост?

Это пример URL-адреса, который мне нужен для прокси:

http://username:password@192.168.0.5/export?uuid=1234567890

Конечная цель - разрешить одному серверу представлять файлы с другого сервера (того, на который мы проксируем), не раскрывая URI прокси-сервера. Теперь у меня это работает на 90% правильно, следуя конфигурации Nginx, найденной здесь:

http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

Мне просто нужно добавить базовую аутентификацию HTTP для отправки на прокси-сервер

Я написал об этом некоторое время назад. Подробности смотрите здесь:

http://shairosenfeld.blogspot.com/2011/03/authorization-header-in-nginx-for.html

Например:

 location / {
    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_pass http://6.6.6.6:80;
    proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";
 }

"a2luZzppc25ha2Vk" - это "king: isnaked" в кодировке base64, так что это будет работать для

http: // король: isnaked@6.6.6.6

Не стесняйтесь проверить сообщение в блоге для получения более подробной информации.

Я получил это, работая с ответом alvosu, но мне пришлось ввести слово "Basic" внутри кавычки строки base64, чтобы это выглядело так:

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

Установите авторизацию proxy_set_header "USER_AND_PASS", где USER_AND_PASS = base64 (user: pass)

Удалите заголовок авторизации, который передается nginx с помощью proxy_set_header Authorization "";.

Я настроил nginx для базовой аутентификации, но Authorization заголовок передавался в proxy_pass директива, и принимающая сторона не смогла обработать токен.

# Basic Auth
auth_basic "Private Stuff";
auth_basic_user_file /etc/nginx/.htpasswd;

location /server {
    proxy_pass http://172.31.31.140:9090;
    proxy_set_header Authorization "";
}

(В моем случае эта ошибка была возвращена Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken)