Smart IP
Smart IPは、IPアドレスに基づいて訪問者の地理的位置(経度/緯度、国、地域、市区町村、郵便番号)を特定し、データをセッションとユーザーデータサービスに保存します。
smart_ip
インストール
composer require 'drupal/smart_ip:8.x-4.2'
概要
Smart IPは、訪問者のIPアドレスに基づいて地理的位置を特定する包括的なジオロケーションモジュールです。このモジュールは、国(ISO 3166 2文字コード)、地域、市区町村、郵便番号、緯度、経度、タイムゾーン、およびユーザーがEU/GDPR対象国からのアクセスかどうかを識別します。
位置データはPHPセッション変数($_SESSION['smart_ip'])とDrupalのユーザーデータサービス(module='smart_ip', name='geoip_location')に保存されます。保存はロールごとに選択的に無効化できます。このモジュールは、データソースサブモジュールを通じて拡張可能なプラグインアーキテクチャを提供し、管理者はMaxMind GeoIP2(バイナリデータベースおよびWebサービス)、IP2Location、IPInfoDB、Abstract IP Geolocationなど、さまざまなジオロケーションプロバイダーから選択できます。
Smart IPには、プライマリデータソースが失敗した場合のフォールバックメカニズムも含まれており、Apache mod_geoip、nginx X-GeoIP-Country、Cloudflare IP Geolocation、Akamai EdgeScapeなどのサーバーサイドジオロケーションヘッダーを使用します。このモジュールは、Blockの表示制御用のCountries条件プラグイン、テスト時のIPスプーフィング用デバッグモード、EU諸国からの訪問者の位置データ保存を防止するGDPRコンプライアンス機能を提供します。
Features
- IPベースのジオロケーションで国、地域、市区町村、郵便番号、緯度、経度、タイムゾーンを特定
- 複数のプラグイン可能なデータソース:MaxMind GeoIP2(バイナリデータベースおよびWebサービス)、IP2Locationバイナリデータベース、IPInfoDB Webサービス、Abstract IP Geolocation Webサービス
- W3C Geolocation APIとGoogle Geocodingを使用したDevice Geolocationサブモジュールで精度を向上(番地、近隣地域、行政区域)
- サーバーサイドジオロケーションヘッダーへの自動フォールバック(mod_geoip、X-GeoIP-Country、Cloudflare、Akamai EdgeScape)
- ロールベースのジオロケーション設定 - ジオロケーションを行うユーザーロールを選択
- EU/GDPR対象国からの訪問者の位置データ保存を防止するGDPRコンプライアンスオプション
- テスト目的でロールごとのIPアドレススプーフィングが可能なデバッグモード
- ページ固有のジオロケーション - ジオロケーション更新をトリガーするページを設定
- 特定のIPアドレスのルックアップをスキップするIP除外リスト
- 訪問者の国に基づくBlockの表示制御用Countries条件プラグイン
- バイナリデータベースデータソース用のCronによる自動データベース更新
- 管理画面での手動IPルックアップツール
- 設定可能な形式(識別子またはUTCオフセット)でのタイムゾーン検出
- 正確なタイムゾーン決定のためのGeo Time Zoneモジュールとの連携
- drupalSettings.smartIpを介してJavaScriptで位置データを利用可能
- IPv4およびIPv6アドレスの両方をサポート
- 登録時にユーザーの位置を保存し、元の位置を保持するオプション
Use Cases
国別コンテンツ制限
Countries条件プラグインを使用して、訪問者の国に基づいてBlockを表示または非表示にします。/admin/structure/blockでBlock表示を設定し、Countries条件を追加して、Blockを表示する国を選択します。地域限定プロモーション、法的コンプライアンス通知、ローカライズされたコンテンツに便利です。
ジオターゲティング広告
JavaScriptでdrupalSettings.smartIp、PHPで\Drupal::service('smart_ip.smart_ip_location')->getData()を介して訪問者の位置データにアクセスし、位置固有の広告やオファーを配信します。
EU訪問者向けGDPRコンプライアンス
「GDPR対象国からの訪問者の位置情報を保存しない」オプションを有効にして、EU加盟国およびGDPR規制に従う地域からの訪問者の個人位置データの保存を防止します。
キャッシュサイトのパフォーマンス最適化
ページキャッシュを使用する場合、Device Geolocationの「ユーザーのジオロケーションチェックにAJAXを使用」オプションを有効にして、ページキャッシュを壊さずに非同期でジオロケーションチェックを実行します。
開発とテスト
デバッグモード機能を使用して、特定のIPアドレスでジオロケーション機能をテストします。特定のロールのデバッグモードを有効にし、テストIPアドレスを入力して、異なる場所からの訪問者をシミュレートします。
ユーザー登録位置追跡
「作成時にユーザーの位置情報を保存」を有効にして、各ユーザーが登録した元の位置を保存します。このデータは別に保存され、ユーザーの現在位置が変更されても保持されます。
ローカルデータベースを使用した高トラフィックサイト
高トラフィックサイトでは、MaxMind GeoIP2またはIP2Locationバイナリデータベースサブモジュールを使用して、外部APIのレート制限と遅延を回避します。Cronを介した自動データベース更新を有効にして、データを最新に保ちます。
Tips
- 管理ページの手動ルックアップツールを使用して、IPアドレスをテストし、データソースが正しく機能していることを確認してください。
- 高トラフィックの本番サイトでは、APIレート制限と外部依存関係を避けるために、Webサービスよりもバイナリデータベースソースを優先してください。
- 「特定のDrupalネイティブページでユーザーのジオロケーションを取得/更新」を設定して、ジオロケーションのオーバーヘッドを必要なページのみに制限してください。
- 条件をサポートするViewsやその他のモジュールと組み合わせて、位置認識コンテンツリストを作成してください。
- モジュールはdrupalSettings.smartIpを介してJavaScriptに位置データを公開し、追加のAJAX呼び出しなしでクライアントサイドのジオターゲティングを可能にします。
- デバッグ時は、デバッグモードIPが実際の訪問者IPより優先されることを忘れないでください。本番環境に移行する前に無効にしてください。
Technical Details
Admin Pages 1
/admin/config/people/smart_ip
Smart IPモジュールのメイン設定ページ。データソースの選択、ジオロケーション対象ロール、デバッグ設定、手動IPルックアップの実行を設定します。
権限 1
Hooks 1
hook_smart_ip_user_save_alter
ユーザーの位置データがセッションとユーザーデータに保存される前に変更できるようにします。
Troubleshooting 6
「ジオロケーション対象ロール」設定で「anonymous」ロールが選択されていることを確認してください。すべての匿名リクエストでジオロケーションルックアップがトリガーされるため、かなりのオーバーヘッドが追加されることに注意してください。
settings.phpでプライベートファイルシステムパスが設定されていることを確認してください。データベースファイルをプライベートファイルディレクトリ内の「smart_ip」フォルダにアップロードしてください。ファイルのパーミッションを確認してください。
データソースが有効なAPIキーまたはデータベースファイルで正しく設定されていることを確認してください。手動ルックアップ機能を試して、データソースが正しく応答しているかテストしてください。
Google Maps APIキーが設定されていることを確認してください。ページがHTTPS経由で配信されていることを確認してください(W3C Geolocation APIに必要)。JavaScriptが有効でブロックされていないことを確認してください。
ユーザーのIPアドレスが除外リストにないか確認してください。現在のページが許可されたページリスト(設定されている場合)にあることを確認してください。ブラウザのCookie/セッションをクリアするか、別のブラウザでテストしてください。
ライセンスキーとアカウントIDが正しいことを確認してください。Cronが正しく実行されていることを確認してください。プライベートファイルディレクトリに十分なディスク容量と書き込み権限があることを確認してください。
Security Notes 5
- 「administer smart_ip」権限は制限付きアクセスとしてマークされています。信頼できるロールにのみ付与してください。
- Webサービス用のAPIキーは設定に保存されます。設定ファイルが適切に保護され、バージョン管理に公開されていないことを確認してください。
- バイナリデータベースファイルは、パブリックファイルディレクトリではなく、プライベートファイルディレクトリに保存する必要があります。
- デバッグモードを使用する場合、設定されたテストIPがログに記録または保存される可能性があることに注意してください。機密でないテストIPを使用してください。
- GDPRコンプライアンス機能は規制要件を満たすのに役立ちますが、完全なコンプライアンスには追加の対策が必要な場合があります。