首頁  >  文章  >  運維  >  Nginx反向代理中基於關鍵字和黑名單的ACL配置

Nginx反向代理中基於關鍵字和黑名單的ACL配置

王林
王林原創
2023-06-10 09:52:391541瀏覽

隨著網路發展的快速進步,應用程式和服務的部署數量越來越多。在一些場景下需要將請求路由到特定的伺服器或應用程式。 Nginx是一個高效能的Web伺服器,也是常用的反向代理方式,可以解決這些問題。基於Nginx的反向代理所提供的ACL模組,管理員可以靈活地控制和管理請求的路由,存取控制以及其他一些網路安全性方面的問題。

在反向代理中,請求從客戶端發送到反向代理伺服器,代理伺服器則代表客戶端向後端伺服器發送請求並將返回結果提供給客戶端。例如,在多種語言和技術棧的現代Web應用程式中,可以透過Nginx反向代理實現透過同一網域路由不同的請求到不同的後端服務。

在本文中,我們將學習如何設定基於關鍵字和黑名單的ACL來實現Nginx反向代理更精細的路由策略和安全控制。

關鍵字ACL

關鍵字ACL是透過匹配請求URL中的關鍵字來實現請求路由的方式。例如,在目前應用程式中,當請求的URL中包含"/app1/"時,我們希望Nginx反向代理將請求路由到後端應用程式1。如果URL中包含"/app2/",則將請求路由到後端應用程式2。

要實現這個功能,需要在Nginx設定檔中設定一個關鍵字ACL。下面是如何配置:

http {
    ...
    # 关键词acl
    map $request_uri $app_name {
        ~* "/app1/" app1;
        ~* "/app2/" app2;
        default "";
    }
}

這個配置中,$request_uri是Nginx內建變量,表示請求的URL。這個變數的值被傳遞到map指令中,map指令則根據預先定義的關鍵字正規表示式進行比對。如果符合成功,則會將應用程式的名稱儲存在$app_name變數中,否則使用default預設值。

接下來就可以將上述定義的$app_name變數作為代理的目標傳遞給代理指令中的代理URL選項:

server {
    ...
    location / {
        ...
        # 配置关键词代理
        proxy_pass http://$app_name.backend.com;
    }
}

在這個組態中,關鍵字ACL會從請求的URL中符合所要求的應用程式的名字,並透過代理指令將用戶端的請求路由到對應的後端應用程式上。

基於黑名單的ACL

黑名單ACL是一種用來阻止某些IP或請求URL的存取的方法。在某些情況下,這種方法非常有用。例如,在遭受惡意攻擊時,管理員可以在Nginx反向代理程式中設定一個黑名單ACL來拒絕一組IP位址的存取。也可以使用黑名單ACL來拒絕某些常見的攻擊URL。

以下是如何配置基於黑名單的ACL:

http {
    ...
    # 黑名单acl
    geo $blocked_ip {
        default 0;
        include /path/to/blacklists/ip.txt;
    }
}

這個配置中,geo指令定義了一個名為$blocked_ip的記憶體變量,用於儲存被阻止的IP位址清單。在這個例子中,使用了一個外部的IP位址黑名單檔案。檔案的格式如下:

10.2.1.10 1;
192.168.0.0/24 1;
202.102.85.154 1;

檔案的每一行包含一個IP位址或CIDR格式的網段,後面跟著數字1表示這個IP位址或CIDR網段被封鎖。

接下來可以在Nginx設定中使用這個黑名單ACL:

server {
    ...
    location / {
        ...
        # 配置黑名单ACL
        if ($blocked_ip) {
            return 403;
        }
        proxy_pass http://backend.com;
    }
}

在這個設定中,使用了if指令來判斷被要求的IP位址是否在黑名單內,如果是則直接返回403禁止訪問的回應。否則就將請求路由到後端的代理伺服器上。

綜上所述,Nginx反向代理提供了很好的ACL模組,和其他功能模組一起使用,可以實現非常靈活的請求路由和存取控制。在反向代理的使用中,了解和掌握這些方法可以讓我們更好地適應各種情況,並提高網路服務的品質和安全性。

以上是Nginx反向代理中基於關鍵字和黑名單的ACL配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn