nginx判定國家ip訪問網站



我們可以通過GeoIP模塊和MaxMind免費數據庫來實現
MaxMind具有新版本的數據庫GeoLite2,它僅支持CSV和mmdb格式。
可以支持mngx_http_geoip2_modulemdb格式,但是當我檢查Nginx by時nginx -V,我發現它是使用編譯的with-http-geoip_module=dynamic
因為我的nginx版本是低版本

檢查geoip模塊是否安裝

nginx -V

image.png

下載GeoIP MaxMind GeoCity和GeoCountry數據庫

我們可以從MaxMind下載最新的數據庫。
https://www.maxmind.com/en/accounts/258407/geoip/downloads
但是,如開頭所述,最新的數據庫僅具有CSV和mmdb格式。

mkdir /etc/nginx/geoip -p
cd /etc/nginx/geoip
下載 GeoLite2-Country-CSV_20200324.zip

我發現geolite2legacy可以GeoLite2數據庫轉換為舊格式。
geolite2legacy使用python做到這一點。在我的環境中,我需要安裝ipaddr和pygeoip來執行它。

apt install python-pip
pip install pygeoip
pip install ipaddr

克隆geolite2legacy,並且將csv格式的GeoLite2數據庫轉換為舊格式

git clone https://github.com/sherpya/geolite2legacy.git
cd geolite2legacy
./geolite2legacy.py -i ../GeoLite2-Country-CSV_20200324.zip -f geoname2fips.csv -o GeoIP.dat

將GeoIP.dat遷移到自定義目錄

mv GeoIP.dat /etc/nginx/geoip/

配置nginx

打開/etc/nginx/nginx.conf並將其放置http{}在任何_包含_行之前的塊中。

        geoip_country /etc/nginx/geoip/GeoIP.dat;
        map $geoip_country_code $redirect_country {
        default no;
        CN yes;     
   }


CN為國家編碼,可以在https://dev.maxmind.com/geoip/legacy/codes/iso3166/中查看各國家的國家編碼


我們這里設置CN為yes, 現在,我們得到了$redirect_country變量,但實際上並沒有重定向。

在 server{} 設置rewrite跳轉

if ($redirect_country = yes) {
    rewrite ^ https://www.lightda.no$request_uri break;
}


這里是定義$redirect_country = yes 則跳轉到其他頁面,相反如果不是yes則繼續訪問該網站.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM