我需要实现类似的功能,当用户点击域名IP / Keepalived Ip如z.z.z.z时,基本的http身份验证应该询问用户名和密码。现在,如果用户名是vikas,它应该重定向到z.z.z.z:5601,如果用户是gopal,它应该重定向到z.z.z.z:5602。
所以这里我对用户有一个主要的依赖,就像我需要在重定向之前检查,如果用户是Vikas或Gopal。我正在尝试跟随,但只有我使用单个位置stenza才能正常工作。
upstream kibana {
server 171.x.x.x:5601;
server 172.x.x.x:5601;
}
upstream kibana2 {
server 171.x.x.x:5602;
server 172.x.x.x:5602;
}
server {
listen 80;
listen 443 ssl;
server_name z.z.z.z;
location / {
auth_basic "protect kibana";
auth_basic_user_file /etc/nginx/htpasswd.user;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://kibana;
}
location / {
auth_basic "protect kibana";
auth_basic_user_file /etc/nginx/htpasswdkibana2.user;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://kibana2;
}
}
所以在第二个位置指令中我使用不同的http密码文件。所以现在的情况是,网页询问用户名和密码,但它没有选择任何一个,我输入了凭据,它清除它并再次要求凭据。有人可以帮助我实现这一目标。
此致 维卡斯
答案 0 :(得分:1)
我认为您可以通过检查用户的名称并将其发送到基于该
的后端来实现。map $remote_user $server_based_on_user {
"vikas" "kibana";
"gopal" "kibana2";
}
upstream kibana {
server 171.x.x.x:5601;
server 172.x.x.x:5601;
}
upstream kibana2 {
server 171.x.x.x:5602;
server 172.x.x.x:5602;
}
server {
listen 80;
listen 443 ssl;
server_name z.z.z.z;
location / {
auth_basic "protect kibana";
auth_basic_user_file /etc/nginx/htpasswd.user;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://$server_based_on_user$request_uri;
}
}
/etc/nginx/htpasswd.user
文件应该同时定义用户