PHP でクライアント IP を取得するために使用される変数は次のとおりです:
##$_SERVER['HTTP_CLIENT_IP'] これヘッダーは存在しますが、それはまれであり、必ずしもすべてのサーバーで実装されているわけではありません。クライアントは偽装される可能性があります。 (推奨学習:
PHP プログラミングの入門から習熟まで )
$_SERVER['HTTP_X_FORWARDED_FOR'] は、HTTP プロキシ後のクライアント IP アドレスを識別するために使用される標準定義です。形式: clientip,proxy1 、プロキシ2。詳細な説明については、http://zh.wikipedia.org/wiki/X-Forwarded-F... を参照してください。クライアントは偽装される可能性があります。 $_SERVER['REMOTE_ADDR'] は信頼できます。これはサーバーと握手する最後の IP です。ユーザーのプロキシ サーバーまたは独自のリバース プロキシである可能性があります。クライアントは偽造できません。 クライアントが偽造できるパラメータはフィルタリングして検証する必要があります。多くの人は $_SERVER 変数の内容が信頼できると考えていますが、実際にはそうではありません。$_SERVER['HTTP_CLIENT_IP'] と $_SERVER['HTTP_X_FORWARDED_FOR'] は両方ともクライアント リクエストのヘッダーから取得されます。ユーザーの実際の IP を厳密に取得したい場合は、
アンチクローラーやアンチ投票が使用されている場合、クライアントが偽造できるものは何も信頼しません。これは厳密に取得されています。 CDN はなく、ユーザーは PHP サーバーに直接接続しますこの場合、TCP 層ハンドシェイクの IP、$_SERVER['REMOTE_ADDR']## を使用します。 #nginx を使用して自作クラスターで負荷分散を実装する場合
この場合、PHP アプリケーション サーバーを外部に公開することはできません。実際の IP を取得します。 nginx でそれを PHP サーバーに送信します。location /{
proxy_set_header client-real-ip $remote_addr;
}
client-real-ip 自分で名前を付けることができ、nginx とシェイクハンドする tcp 層の ip を PHP に転送します。
CDN を使用する場合、PHP サーバーからソースを取得するときに、
CDN はクライアントのハンドシェイク IP を転送します。各社のポリシーが異なります。詳細については、CDN のドキュメントを確認してください。
もちろん、厳密な検証が必要なビジネスを第 2 レベルのドメイン名に関連付け、独自の nginx サーバーを個別に使用して CDN を回避することもできます。
以上がPHPで実際のIPを特定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。