5

CloudFlare は元の IP からユーザーの国を提供しますが、都市レベルの場所が必要なので、mod_geoip Apache スクリプトを使用して MaxMind の GeoCityLite を追加しました。

問題は、php変数でIPを取得することです。次のようなものを使用しています

$country = apache_note("GEOIP_COUNTRY_CODE");

これは素晴らしいことですが、mod_geoip が使用している IP は CloudFlare DNS であり、エンド ユーザーではありません。CloudFlare はサーバー変数 HTTP_CF_CONNECTING_IP を提供してエンドユーザー IP を使用しますが、mod_geoip でその変数/IP を使用するにはどうすればよいですか?

これは htaccess の数行で実行できますか?

編集: geoip 用の php API を使用する回避策がありますが、これは簡単ですが、php api の apache ルックアップを使用したベンチマークははるかに優れているため、この解決策を見つけたいと思います。

4

4 に答える 4

18

geoip を呼び出す前にこれを行います。

$_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR'];
于 2012-07-19T07:21:55.743 に答える
0

Cloudflare には Apache 拡張機能 mod_cloudflare ( https://github.com/cloudflare/CloudFlare-Tools ) があり、Cloudflare IP を正しいものに置き換えていると思います。

mod_geoip の前にロードされた場合、mod_geoip の動作によっては動作する可能性があります。

ただし、mod_cloudflare をインストールするには root アクセスが必要です。

于 2011-07-07T11:04:57.020 に答える
-3

のような変数に格納されたユーザーの IP アドレスを取得するに$ipは、次の 2 つの方法があります。

$ip = $_SERVER['REMOTE_ADDR'];

また

$ip = getenv('REMOTE_ADDR');
于 2011-06-24T17:34:03.980 に答える