目錄
一、黑/白名單IP限制存取設定
1、第一種方法:allow、deny
2:第二種方法,ngx_http_geo_module
3、ngx_http_geo_module 負載平衡(擴展)
二、國家地區IP限制存取
1:安裝ngx_http_geoip_module模組
2、下載 IP 資料庫
3、設定nginx
首頁 運維 Nginx 網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制

網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制

Jun 01, 2023 pm 05:27 PM
nginx ip

    一、黑/白名單IP限制存取設定

    nginx設定黑白名單有好幾種方式,這裡只介紹常用的兩種方法。

    1、第一種方法:allow、deny

    deny和allow指令屬於ngx_http_access_module,nginx預設載入此模組,所以可直接使用。

    這種方式,最簡單,最直接。設定類似防火牆iptable,使用方法:

    直接設定檔中新增:

    #白名单设置,allow后面为可访问IP 
    location / {
         allow 123.13.123.12;
         allow 23.53.32.1/100;
         deny  all;
    }
    
    #黑名单设置,deny后面接限制的IP,为什么不加allow all? 因为这个默认是开启的 
    location / {
         deny 123.13.123.12;
    }
    
    #白名单,特定目录访问限制
    location /tree/list {
         allow 123.13.123.12;
         deny  all;
    }
    登入後複製

    或透過讀取檔案IP設定白名單

    location /{
        include /home/whitelist.conf;
        #默认位置路径为/etc/nginx/ 下,
        #如直接写include whitelist.conf,则只需要在/etc/nginx目录下创建whitelist.conf
        deny all;
    }
    登入後複製

    在/home/目錄下創建whitelist.conf,並寫入需要加入白名單的IP,添加完成後查看如下:

    cat /home/whitelist.conf
    
    #白名单IP
    allow 10.1.1.10;
    allow 10.1.1.11;
    登入後複製

    白名單設定完成,黑名單設定方法一樣。

    2:第二種方法,ngx_http_geo_module

    預設情況下,一般nginx是有加該模組的,ngx_http_geo_module:官方文檔,參數需設定在位置在http模組。

    此模組可設定IP限制,也可設定國家地區限制。位置在server模組外即可。

    語法範例:

    設定檔直接新增

    geo $ip_list {
        default 0;
        #设置默认值为0
        192.168.1.0/24 1;
        10.1.0.0/16    1;
    }
    server {
        listen       8081;
        server_name  192.168.152.100;
        
        location / {
            root   /var/www/test;
    		index  index.html index.htm index.php;
    		if ( $ip_list = 0 ) {
    		#判断默认值,如果值为0,可访问,这时上面添加的IP为黑名单。
    		#白名单,将设置$ip_list = 1,这时上面添加的IP为白名单。
    		proxy_pass http://192.168.152.100:8081;
        }
    登入後複製

    同樣可透過讀取檔案IP設定

    geo $ip_list {
        default 0;
        #设置默认值为0
        include ip_white.conf;
    }
    server {
        listen       8081;
        server_name  192.168.152.100;
        
        location / {
            root   /var/www/test;
    		index  index.html index.htm index.php;
    		if ( $ip_list = 0 ) {
    			return 403;
    			#限制的IP返回值为403,也可以设置为503,504其他值。
    			#建议设置503,504这样返回的页面不会暴露nginx相关信息,限制的IP看到的信息只显示服务器错误,无法判断真正原因。
        }
    登入後複製

    在/etc/nginx目錄下建立ip_list .conf,新增IP完成後,查看如下:

    cat /etc/nginx/ip_list.conf
    
    192.168.152.1 1;
    192.168.150.0/24 1;
    登入後複製

    當設定完成後,IP清單檔案ip_list.conf 將作為白名單,若請求的IP 不在名單中,則會直接傳回403頁。黑名單設定方法相同。

    3、ngx_http_geo_module 負載平衡(擴展)

    ngx_http_geo_module,模組還可以做負載平衡使用,如web集群在不同地區都有伺服器,某個地區IP段,負載平衡至訪問某個地區的伺服器。類似的方式是在IP後面添加自訂值,這些值不僅限於數字,還可以使用字母,例如US、CN等。

    範例:

    如果三台伺服器:122.11.11.11,133.11.12.22,144.11.11.33

    geo $country {
        default default;
        111.11.11.0/24   uk;
        #IP段定义值uk
        111.11.12.0/24   us;
        #IP段定义值us
        }
    upstream  uk.server {
        erver 122.11.11.11:9090;
        #定义值uk的IP直接访问此服务器
    } 
    
    upstream  us.server {
        server 133.11.12.22:9090;
        #定义值us的IP直接访问此服务器
    }
    
    upstream  default.server {
        server 144.11.11.33:9090;
        #默认的定义值default的IP直接访问此服务器
    }
     
    server {
        listen    9090;
        server_name 144.11.11.33;
    
        location / {
          root  /var/www/html/;
          index index.html index.htm;
         }
     }
    登入後複製

    然後在

    二、國家地區IP限制存取

    一些第三方服務例如cloudflare也提供設定選項,使防火牆規則的設定更加方便。這裡講講nginx的設定方法。

    1:安裝ngx_http_geoip_module模組

    ngx_http_geoip_module:官方文檔,參數需設定在位置在http模組。

    nginx預設情況下不建置此模組,應使用 --with-http_geoip_module 配置參數啟用它。

    對於ubuntu系統來說,直接安裝 nginx-extras元件,包括幾乎所有的模組。

    sudo apt install nginx-extras
    登入後複製

    對於centos系統,安裝模組。

    yum install nginx-module-geoip
    登入後複製

    2、下載 IP 資料庫

    此模組依賴IP資料庫,所有資料在此資料庫中讀取,所有資料都需要下載ip庫(dat格式)。

    MaxMind 提供了免費的 IP 地理資料庫,壞消息是MaxMind 官方已經停止支援dat格式的ip函式庫。

    在其他地方可以找到dat格式的文件,或是舊版的,當然資料不可能最新,多少有誤差。

    下載同時包含Ipv4和Ipv6的country、city版本。

    #下载国家IP库,解压并移动到nginx配置文件目录,
    sudo wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
    gunzip maxmind.dat.gz
    sudo mv maxmind.dat /etc/nginx/GeoCountry.dat
    
    sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz
    gunzip maxmind.dat.gz
    sudo mv maxmind.dat /etc/nginx/GeoCity.dat
    登入後複製

    3、設定nginx

    範例:

    geoip_country /etc/nginx/GeoCountry.dat;
    geoip_city /etc/nginx/GeoCity.dat;
    
    server {
        listen  80;
        server_name 144.11.11.33;
    
        location / {
          root  /var/www/html/;
          index index.html index.htm;
          if ($geoip_country_code = CN) {
      			return 403;
     		#中国地区,拒绝访问。返回403页面
    		}
      	}
     }
    登入後複製

    這裡,地區國家基礎設定就完成了。

    Geoip其他參數:

    國家相關參數:
    $geoip_country_code #兩位字元的英文國家碼。如:CN, US
    $geoip_country_code3 #三位字元的英文國家碼。如:CHN, USA
    $geoip_country_name #國家英文全名。如:China, United States
    城市相關參數:
    $geoip_city_country_code #也是兩個字元的英文國碼。
    $geoip_city_country_code3 #上同
    $geoip_city_country_name #上同.
    $geoip_region #這個經測試是兩位數的數字,如杭州是02, 上海是 23。但沒有搜到相關資料,希望知道的朋友留言告之。
    $geoip_city #城市的英文名稱。如:Hangzhou
    $geoip_postal_code #城市的郵遞區號。經測試,國內這一字段為空
    $geoip_city_continent_code #不知什麼用途,國內好像都是AS
    $geoip_latitude #緯度
    $geoip_longitude #經度

    #

    以上是網站怎麼透過nginx設定黑/白名單IP限制及國家城市IP存取限制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

    如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

    docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

    可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

    docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

    Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

    怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

    確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

    docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

    在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

    nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

    可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

    nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

    在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

    怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

    啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

    See all articles