1. 介紹
您可以通過實施用戶名/密碼身份驗證來限制對網站或網站某些部分的訪問。用戶名和密碼取自密碼文件創建工具(例如 apache2-utils)創建並填充的文件。
HTTP基本身份驗證也可以與其他訪問限制方法結合使用,例如通過IP地址或地理位置限制訪問。
2. 先決條件
- NGINX Plus或NGINX開源版
- 密碼文件創建實用程序,例如apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。
3. 創建密碼文件
要創建用戶名-密碼對,請使用密碼文件創建實用程序,例如,apache2-utils或httpd-tools。
- 確認已安裝apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。
- 創建密碼文件和第一個用戶。運行htpasswd帶有-c標誌的實用程序(以創建一個新文件),文件路徑名作爲第一個參數,用戶名作爲第二個參數:
$ sudo htpasswd -c /etc/apache2/.htpasswd user1
按Enter,然後在提示時鍵入user1的密碼。
- 創建其他用戶密碼對。省略-c標誌,因爲該文件已經存在:
$ sudo htpasswd /etc/apache2/.htpasswd user2
- 您可以確認該文件包含成對的用戶名和加密的密碼:
$ cat /etc/apache2/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/
4. 配置NGINX和NGINX Plus以進行HTTP基本身份驗證
- 在要保護的位置內,指定auth_basic指令併爲密碼保護的區域命名。要求提供憑據時,該區域的名稱將顯示在用戶名/密碼對話框窗口中:
location /api {
auth_basic “Administrator’s Area”;
#...
}
- 使用auth_basic_user_file指令指定包含用戶/密碼對的 .htpasswd 文件的路徑:
location /api {
auth_basic “Administrator’s Area”;
auth_basic_user_file /etc/apache2/.htpasswd;
}
另外,您可以使用基本身份驗證來限制對整個網站的訪問,但仍將某些網站區域設爲公開。在這種情況下,請指定auth_basic指令的off參數,該指令取消從較高配置級別繼承::
server {
...
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
5. 將基本身份驗證與IP地址訪問限制相結合
HTTP基本身份驗證可以有效地結合IP地址的訪問限制。您可以至少實現兩種方案:
- 用戶必須同時經過身份驗證並具有有效的IP地址
- 用戶必須經過身份驗證或具有有效的IP地址
- 使用allow和deny指令允許或拒絕來自特定IP地址的訪問:
location /api {
#...
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
}
僅對192.168.1.1/24網絡(192.168.1.2地址除外)授予訪問權限。請注意,allow和deny指令將按其定義的順序應用。
- 將IP和HTTP身份驗證的限制與satisfy指令結合使用。如果將指令設置爲all,如果客戶端同時滿足兩個條件,則將授予訪問權限。如果將指令設置爲any,如果客戶端至少滿足以下條件,則將授予訪問權限:
location /api {
#...
satisfy all;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
}
6. 完整的例子
該示例顯示瞭如何通過簡單身份驗證以及IP地址訪問限制來保護您的狀態區域:
http {
server {
listen 192.168.198.133:80;
root /usr/share/nginx/html;
location /api {
api;
satisfy all;
deny 192.168.198.2;
allow 192.168.198.0/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator’s Area";
auth_basic_user_file /etc/apache2/.htpasswd;
}
}
}
當您訪問狀態頁面時,系統會提示您登錄:
如果提供的名稱和密碼與密碼文件不匹配,則會出現401 (Authorization Required)錯誤。
參考文檔
https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/