web-dev-qa-db-ja.com

$ _SERVER ["REMOTE_ADDR"]は、訪問者IPではなくサーバーIPを提供します

訪問者のIPアドレスを追跡しようとしています。 $_SERVER["REMOTE_ADDR"]を使用すると、訪問者のIPアドレスではなくサーバーのIPアドレスを取得します。私はこれを複数の場所にある複数のマシンで試しましたが、すべて同じIPになりました。これに影響する可能性のあるPHP /サーバー設定はありますか?

46
Lincecum

REMOTE_ADDRは信頼できません。

とにかく、試してみて

$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
    $ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}

編集:また、サーバーのルーターでポート転送が有効になっていますか?パケットが乱れている可能性があります。

46
simshaun

$ _SERVER ["REMOTE_ADDR"]を使用すると、訪問者のIPアドレスではなくサーバーのIPアドレスを取得します。

次に、構成に何か問題があるか、奇妙です。

  • 何らかのリバースプロキシを使用していますか?その場合、@ simshaunの提案が機能する可能性があります。

  • Webサーバーの設定には、他に何か異常なことがありますか?

  • 使用しているPHPコードを表示できますか?

  • 住所がどのように見えるかを示してください。それはローカルのものですか、それともインターネットアドレスですか?

19
Pekka 웃

$_SERVER['REMOTE_ADDR']は、リクエストがWebサーバーに送信されたIPアドレスを提供します。これは通常、訪問者のアドレスですが、あなたの場合、リクエストをインターセプトするWebサーバーの直前に何らかのプロキシが存在するように聞こえます。したがって、Webサーバーからは、リクエストがそこから発信されているように見えます。

11
casablanca

予想されるヘッダーにIPアドレスが設定されていないことを確認してください。次の手順を実行して、サーバー変数全体を調べて、どの変数があなたのケースに適しているかを判断してください。

print_r($_SERVER);
7
hammady

交換:

$_SERVER["REMOTE_ADDR"];

と:

$_SERVER["HTTP_X_REAL_IP"];

私のために働いた。

3
chiappa

PHP 7.0 $ _SERVER変数が変更されました。それをvar_dumpして、それが要求にどのように適合するかを確認します。

リモートの詳細を提供するもののいくつかは、REMOTE_ADDR HTTP_X_FORWARDED_FOR HTTP_CF_CONNECTING_IP HTTP_CF_IPCOUNTRYです。

0
Cosmo Arun