相同的server_name但不同的端口号以及Nginx上的不同用户?

时间:2017-09-14 19:17:25

标签: nginx

我需要实现类似的功能,当用户点击域名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密码文件。所以现在的情况是,网页询问用户名和密码,但它没有选择任何一个,我输入了凭据,它清除它并再次要求凭据。有人可以帮助我实现这一目标。

此致 维卡斯

1 个答案:

答案 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文件应该同时定义用户