NGinx代理,添加基于IP地址的基本authentication

我正在构build一个基于OpenVPN的系统,在这个系统中,客户端将连接到一个网站,通过基本身份validation进行保护(就是这样,没办法改变这个)。

我希望我可以通过一个nginx代理,在我到达网站之前为我添加正确的基本authentication头。 这样,根据客户端使用的IP地址(来自OpenVPNconfiguration),我将检索它的用户名/密码在数据库中,并相应地伪造标题。 所以用户不必input任何login/密码。

注入基本身份validation标头很容易:

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”当然是这个login名的密码:base64。

所以现在我需要用数据库中的值replacea2luZzppc25ha2Vk,根据$ remote_addr

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

 geo $auth_base64 { <remote_addr1>/32 <base64_1>; <remote_addr2>/32 <base64_2>; <remote_addrN>/32 <base64_N>; default <base64_for_default_address> } 

当然没有“<>”。

然后将此configuration包含在http {}部分中。 你可以做简单的cronjob(dump,test,reload)。

因此,可以在proxy_set_header指令中使用variables$ auth_base64:

 proxy_set_header Authorization "Basic $auth_base64"; 

或者你可以使用第三方模块: http : //www.grid.net.ru/nginx/eval.en.html女巫可以评估variables的后端响应。 没有自己testing。 现代nginx版本可能会出现一些问题。