NGINX使用HTTP基本身份驗證限制訪問

1. 介紹

    您可以通過實施用戶名/密碼身份驗證來限制對網站或網站某些部分的訪問。用戶名和密碼取自密碼文件創建工具(例如 apache2-utils)創建並填充的文件。
    HTTP基本身份驗證也可以與其他訪問限制方法結合使用,例如通過IP地址或地理位置限制訪問。

2. 先決條件

  • NGINX Plus或NGINX開源版
  • 密碼文件創建實用程序,例如apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。

3. 創建密碼文件

    要創建用戶名-密碼對,請使用密碼文件創建實用程序,例如,apache2-utils或httpd-tools。

  1. 確認已安裝apache2-utils(Debian,Ubuntu)或httpd-tools(RHEL / CentOS / Oracle Linux)。
  2. 創建密碼文件和第一個用戶。運行htpasswd帶有-c標誌的實用程序(以創建一個新文件),文件路徑名作爲第一個參數,用戶名作爲第二個參數:
$ sudo htpasswd -c /etc/apache2/.htpasswd user1

    按Enter,然後在提示時鍵入user1的密碼。

  1. 創建其他用戶密碼對。省略-c標誌,因爲該文件已經存在:
$ sudo htpasswd /etc/apache2/.htpasswd user2
  1. 您可以確認該文件包含成對的用戶名和加密的密碼:
$ cat /etc/apache2/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/

4. 配置NGINX和NGINX Plus以進行HTTP基本身份驗證

  1. 在要保護的位置內,指定auth_basic指令併爲密碼保護的區域命名。要求提供憑據時,該區域的名稱將顯示在用戶名/密碼對話框窗口中:
location /api {
    auth_basic “Administrator’s Area”;
    #...
}
  1. 使用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地址
  1. 使用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指令將按其定義的順序應用。

  1. 將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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章