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


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

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

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

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

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

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


40
2018-02-03 17:53


Источник


@all: убедитесь, что вам нужна HTTP-аутентификация по умолчанию при использовании этого решения, а не HTTP-дайджест-аутентификация;) Было довольно сложно отладить, пока я не понял ... stackoverflow.com/questions/9534602/... - SimonSimCity


Ответы:


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

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

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


49
2017-12-30 07:31



Ссылка сломана - Alex
Ссылка сейчас находится здесь: shairosenfeld.blogspot.com/search?q=nginx в случае, если кто-то задается вопросом - ckm
Мне нужно что-то более сложное - Ilja
Ваше решение недостаточно гибкое. Было бы очень полезно кодировать имя пользователя: пароль «на лету». Во-первых, nginx должен анализировать имя пользователя: пароль из URL, во-вторых, nginx должен кодировать эти данные и устанавливать их в соответствующем заголовке. Я не хочу жестко кодировать учетные данные. - Johnny
Я получаю «плохую просьбу», когда пытаюсь использовать ее в настройках .. любая идея? - Spock


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

proxy_set_header Authorization "Basic dGVzdHN0cmluZw==";

17
2018-02-03 21:53



Вы знаете, как закодировать имя пользователя: пароль на лету с nginx? Учетные записи с жестким кодом не являются гибкими, потому что я хочу, чтобы аутентифицировать пользователя с учетными данными, указанными им в URL. - Johnny
Я нашел, как кодировать base64 с nginx wiki.nginx.org/HttpSetMiscModule#set_encode_base64, Это более полезно, чем жестко заданные учетные данные. - Johnny
@Johnny ссылки на те документы сейчас: github.com/openresty/set-misc-nginx-module#set_encode_base64 - Al Dass


Установите полномочия proxy_set_header «USER_AND_PASS», где USER_AND_PASS = base64 (пользователь: pass)


4
2018-02-03 18:01



отсутствует ключевое слово Basic, - Jan-Philip Gehrcke