Я создаю систему на основе OpenVPN, в которой клиенты будут подключаться к веб-сайту, защищенному с помощью базовой аутентификации (так оно и есть, изменить это невозможно).
Я хотел бы пройти через прокси-сервер nginx, который добавит мне правильный заголовок базовой аутентификации, прежде чем попасть на веб-сайт. Таким образом, на основе IP-адреса, используемого клиентом (исходящего из конфигурации OpenVPN), я бы получил его имя пользователя / пароль в БД и соответственно подделал заголовок. Таким образом, пользователю не нужно вводить логин / пароль.
Ввести заголовок базовой аутентификации очень просто:
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» - это, конечно, base64 для этого логина: пароля.
Итак, теперь мне нужно заменить a2luZzppc25ha2Vk значением, найденным в БД, согласно $ remote_addr
Вы можете сбросить свою базу данных в конфигурацию следующим образом:
geo $auth_base64 {
<remote_addr1>/32 <base64_1>;
<remote_addr2>/32 <base64_2>;
<remote_addrN>/32 <base64_N>;
default <base64_for_default_address>
}
Конечно без «<>».
Затем включите эту конфигурацию в раздел http {}. Вы можете сделать простую cronjob (дамп, тест, перезагрузка).
Таким образом, переменная $ auth_base64 может использоваться в директиве proxy_set_header:
proxy_set_header Authorization "Basic $auth_base64";
Или вы можете использовать сторонний модуль: http://www.grid.net.ru/nginx/eval.en.html ведьма может оценивать ответ серверной части в переменных. Самостоятельно не проверял. Могут возникнуть проблемы с современными версиями nginx.