NGinx 代理,添加基于 IP 地址的基本身份验证

NGinx 代理,添加基于 IP 地址的基本身份验证

我正在构建一个基于 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。

因此现在我需要根据 $remote_addr 将 a2luZzppc25ha2Vk 替换为 DB 中找到的值

答案1

您可以通过以下方式将数据库转储到配置中:

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 版本可能会出现一些问题。

相关内容