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'文件中。 –