2017-04-19 44 views
0

我的要求是我有两个不同的用户,一个是admin用户,另一个是普通用户。管理员用户可以访问所有URL,而普通用户只有在访问其他访问被拒绝的URL时才能访问一个URL。在nginx中限制访问不同用户

目前我能够设置管理员用户规则,其中管理员用户的详细信息在.htpasswd中提到,它的工作正常。以下是配置文件。

server { 
    listen 8880; 

    server_name test.com; 

    auth_basic "Restricted Access"; 
    auth_basic_user_file /etc/nginx/htpasswd.users; 

    location/{ 
     proxy_pass http://localhost:5601; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 
} 

请帮助。

回答

0

您可以使用auth_basic off;来允许访问特定的location块。

但是,location块必须完整(并且可以从周围块继承一些proxy module configuration statements)。

您可能需要使用regular expression location block来匹配多个URI,因为允许的URI可能会指定其他资源文件。

例如:

auth_basic "Restricted Access"; 
auth_basic_user_file /etc/nginx/htpasswd.users; 

proxy_http_version 1.1; 
proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection 'upgrade'; 
proxy_set_header Host $host; 
proxy_cache_bypass $http_upgrade; 

location/{ 
    proxy_pass http://localhost:5601; 
} 

location ~ ^/(allowed/uri.html|some.js|some.css)$ { 
    auth_basic off; 
    proxy_pass http://localhost:5601; 
} 
+0

如果我创造用户文件像httpasswd.users,另一个是httpasswd.admin则是有可能,httpasswd.admin用户可以访问所有URL,但httpasswd.users只能访问测试.com /仪表板 –

+0

不,这两个文件将具有不重叠的范围,但是您可以确保'httpasswd.admin'文件中的每个条目也位于'httpasswd.users'文件中。 –