天天看點

nginx限制ip通路_Nginx 層面配置基礎使用者驗證

應用場景:大概是在内部網站需要外部使用者通路到,同時不能給通路者網站賬号權限,是以在 nginx 層面進行限制。例如外包項目,内部員工有賬号進行文檔的操作,外包員工沒有内部賬号,但需要讓他們能夠看到文檔,是以在 nginx 層面設定使用者驗證是最佳最簡單的選擇,多數情況下雇主方不會給外包員工開一個基礎通路權限的賬号。

在 nginx 層面進行進行使用者認證的前置條件:需要有對應的密碼建立程式,如

apache2-utils

(Debian,Ubuntu)或

httpd-tools

(RHEL / CentOS / Oracle Linux),不同作業系統是不同的軟體。

建立賬戶密碼檔案

  1. 使用指令

    sudo htpasswd -c /etc/apache2/.htpasswd user1

    建立第一個賬戶,然後按下 Enter 鍵輸入密碼,同樣的指令,沒有

    -c

    參數建立第二個使用者及密碼,

    -c

    參數為建立檔案,在第二次及以後的指令中不需要再次建立檔案。
  2. 确認一下檔案及賬号資訊生成成功,使用指令

    cat /etc/apache2/.htpasswd

    檢視檔案内容,應該為賬号及加密後的密碼,如:

    user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0

    等。

配置 nginx 進行 http 基礎使用者驗證

使用

auth_basic

指令指定設定受保護區域的名稱,此名稱會顯示在賬号密碼彈窗上,使用

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;
    }
}
           

通過 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.2

位址以外的網絡,僅授予

192.168.1.1/24

的通路權限。注意:

allow

deny

指令将按照定義的順序應用。

2.通過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;
}
           

綜上可以組織成一個完整的例子:

http {
    server {
        listen 192.168.1.23:8080;
        root   /usr/share/nginx/html;

        location /api {
            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 /etc/apache2/.htpasswd; 
        }
    }
}
           

最終效果如圖:

nginx限制ip通路_Nginx 層面配置基礎使用者驗證
以上内容希望幫助到大家, 很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴充、高性能、高并發、伺服器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點進階進階幹貨需要的可以免費分享給大家 ,需要請戳這裡連結 或 者關注咱們下面的知乎專欄

PHP架構師圈子​zhuanlan.zhihu.com

nginx限制ip通路_Nginx 層面配置基礎使用者驗證