nginx でブラック リストとホワイト リストを構成するにはいくつかの方法があります。ここでは一般的に使用される 2 つのみを示します。メソッド。
拒否と許可の命令は 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; }
Create を読み取ってホワイトリストを構成します。 home/ディレクトリwhitelist.confに、ホワイトリストに追加したいIPを記述します 追加完了後、以下を確認します:
cat /home/whitelist.conf #白名单IP allow 10.1.1.10; allow 10.1.1.11;
ホワイトリストの設定が完了し、ブラックリストの設定方法は同じ。
デフォルトでは、このモジュールは通常 nginx に追加されます ngx_http_geo_module: 公式ドキュメント、パラメータは http モジュールに設定する必要があります。
このモジュールでは、IP 制限と国と地域の制限を設定できます。場所はサーバー モジュールの外側でもかまいません。
構文例:
設定ファイルを直接追加します
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 を作成します
cat /etc/nginx/ip_list.conf 192.168.152.1 1; 192.168.150.0/24 1;
設定が完了すると、IP リスト ファイル ip_list.conf がホワイトリストとして使用されます。要求された IP がリストにない場合は、 403 ページが直接返されます。ブラックリストの設定方法も同様です。
ngx_http_geo_module モジュールは、異なるリージョンにサーバーがある Web クラスター、特定のリージョンの IP セグメント、負荷分散などのロード バランシングにも使用できます。特定のリージョン内のサーバーにアクセスするためのバランスを調整します。同様の方法は、IP の後ろにカスタム値を追加することです。これらの値は数字に限定されず、US、CN などの文字も使用できます。
例:
サーバーが 3 台ある場合: 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; } }
Then
cloudflare などの一部のサードパーティ サービスでは、ファイアウォール ルールの設定をより便利にするための設定オプションも提供されています。ここではnginxの設定方法について説明します。
ngx_http_geoip_module: 公式ドキュメント。パラメータは http モジュールに設定する必要があります。
nginx はデフォルトではこのモジュールをビルドしません。--with-http_geoip_module 構成パラメーターを使用して有効にする必要があります。
Ubuntu システムの場合は、ほぼすべてのモジュールを含む nginx-extras コンポーネントを直接インストールします。
sudo apt install nginx-extras
centos システムの場合は、モジュールをインストールします。
yum install nginx-module-geoip
このモジュールは IP データベースに依存しており、すべてのデータはこのデータベースに読み込まれ、IP ライブラリ (dat 形式) をダウンロードする必要があります。
MaxMind は無料の IP 地理データベースを提供しますが、残念なことに、MaxMind は dat 形式の IP データベースのサポートを正式に停止しました。
他の場所にあるdat形式のファイルや古いバージョンのファイルも存在しますが、当然ながら最新のデータとは限らず、多少の誤差はあります。
ダウンロードには、Ipv4 と Ipv6 の両方の国および都市バージョンが含まれています。
#下载国家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
例:
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 #2 文字の英語の国コード。例: CN、US
$geoip_country_code3 #3 文字の英語の国コード。例: CHN、USA
$geoip_country_name #国の完全な英語名。例: 中国、米国
都市関連パラメータ:
$geoip_city_country_code # も 2 文字の英語の国コードです。
$geoip_city_country_code3 #同上
$geoip_city_country_name #同上。
$geoip_region #これは、杭州の 02、上海の 23 など、2 桁の数字であることがテストされています。しかし、該当する情報は見つかりませんでした。詳しい方はメッセージを残していただければ幸いです。
$geoip_city #都市の英語名。例: Hangzhou
$geoip_postal_code #都市の郵便番号。テスト後、中国ではこのフィールドは空です
$geoip_city_continent_code #何に使用されるかはわかりませんが、AS
$geoip_latitude #Latitude
$geoip_longitude #Longitude
以上がWeb サイトは、nginx を通じてブラック/ホワイトリスト IP 制限や国および都市の IP アクセス制限をどのように設定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。