隨著行動互聯網和多終端設備的普及,網站的存取方式和設備類型也越來越豐富。為了確保網站的穩定性和安全性,網站伺服器需要進行反向代理,同時也需要對不同設備和瀏覽器類型進行限制,這就需要使用Nginx反向代理中基於設備及瀏覽器指紋的ACL配置。
什麼是Nginx反向代理?
Nginx反向代理程式是一種伺服器作為客戶端來存取其他伺服器資源的代理方式。簡單來說,就是在客戶端和伺服器之間增加一道代理伺服器,客戶端向代理伺服器請求資源,代理伺服器再向真正的伺服器請求資源,然後將請求結果傳回給客戶端。這種方式可以有效減輕伺服器的壓力,並提高網站的效能和可靠性。
Nginx反向代理程式中的ACL配置
ACL(Access Control List,存取控制清單)是Nginx反向代理程式中的功能,用於根據客戶端請求的IP位址、請求方法、URL等條件進行過濾限制。在ACL中,我們也可以根據設備類型和瀏覽器類型進行限制。
由於不同裝置和瀏覽器類型的渲染方式和規格不同,我們可以根據這些特徵來做出不同的回應,例如提供不同的頁面結構、樣式或資源。同時,也可以透過ACL配置來限制某些裝置或瀏覽器的請求,提升網站的安全性和穩定性。
基於設備及瀏覽器指紋的ACL配置
現在的設備和瀏覽器類型實在是太多了,要一個一個手動配置顯然不現實。但幸運的是,Nginx反向代理提供了第三方模組deviceatlas,我們可以透過這個模組來自動辨識裝置及瀏覽器類型。
安裝deviceatlas模組
以CentOS為例,先安裝必要的依賴:
sudo yum install gcc-c pcre-devel zlib-devel
然後下載deviceatlas模組,解壓縮並執行安裝:
sudo wget -O ~/deviceatlas.tar.gz https://github.com/devicedetection/device-nginx/archive/master.tar.gz
sudo tar zxvf ~/deviceatlas.tar.gz -C ~/
cd ~/device-nginx-master
sudo ./configure --add-module=$PWD
sudo make && sudo make install
經過上述步驟,我們就可以在Nginx中使用deviceatlas模組了。
設定Nginx反向代理
在Nginx設定檔中,加入以下設定:
http {
deviceatlas /usr/share/devicedata/51Degrees.dat; map $device_is_mobile $acl { "" block_ua; "true" allow; "false" block_ua; } map $device_brand_name $brand_map { "~Huawei" "huawei.com"; "~Samsung" "samsung.com"; "~Apple" "apple.com"; default "default.com" } server { listen 80; server_name server.com; location / { if ($acl = "allow") { proxy_pass http://backend; } if ($acl = "block_ua") { return 403; } } location /brand { proxy_pass http://$brand_map; } }
}
##解析以上設定:先使用deviceatlas模組載入裝置資訊檔;使用map指令將裝置分類為“行動端」和「非行動端”,未辨識的裝置視為非移動端,設備分類後,我們就可以方便地根據不同設備類型做出不同響應;使用另一個map指令將設備品牌名稱映射到對應的後端伺服器域名上; ######################## #在Nginx反向代理伺服器上,使用location指令匹配請求URL,若當前請求來自移動設備,則允許代理請求;若當前請求來自未知設備或非移動設備,則不允許代理請求;##### #在請求指定URL時,若請求來自行動裝置且品牌為Huawei、Samsung、Apple,則將請求代理到對應的伺服器上;反之,如果請求來自未知裝置或非行動裝置或品牌未符合任何一項,則將請求代理到預設伺服器上。 ######總結######基於裝置及瀏覽器指紋的ACL配置,可以幫助Nginx反向代理伺服器實現對多樣化存取設備和多樣化存取方式的篩選和回應。 Nginx反向代理伺服器可以透過使用deviceatlas模組自動識別設備品牌、型號和瀏覽器類型,並根據特定條件做出相應的ACL配置,從而提高網站的效能、安全性和穩定性。 ###以上是Nginx反向代理中基於設備及瀏覽器指紋的ACL配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!