Skip to content

REST API レート制限の IP アドレス取得設定

非同期読み込み API(/async-ranking, /async-heatmap-detail, /async-end-number)のレート制限では、クライアント IP をキーに制限をかけています。本ドキュメントは、その IP 取得ロジックの設定方法と本番環境移行時の注意をまとめたものです。

前提

  • 定数は 本プロジェクトでは定義しませんwp-config.php(WordPress ルート)または環境変数で、本番サーバー側で定義します。
  • 本プロジェクトから本番へデプロイするのは core_src 配下と connector.php のみです。wp-config.php は本プロジェクトに含まれず、本番サーバーの WordPress ルートで別管理となります。

デフォルトの挙動

  • REMOTE_ADDR のみを使用します。
  • X-Forwarded-ForX-Real-IP など、クライアントが偽装可能なヘッダーは 参照しません(セキュリティのため)。

定数による設定

Cloudflare や信頼できるリバースプロキシの背後で運用する場合、wp-config.php で以下のいずれかを定義すると、該当ヘッダーから IP を取得します(取得できない場合は REMOTE_ADDR にフォールバック)。

両方の定数が定義されている場合は、USE_CLOUDFLARE_IP が優先され、HTTP_CF_CONNECTING_IP から取得できない場合に TRUSTED_PROXY_HEADER が使われます。

USE_CLOUDFLARE_IP

Cloudflare 経由でアクセスしている場合に、CF-Connecting-IP ヘッダーから IP を取得します。

php
// wp-config.php(WordPress ルート)
define( 'USE_CLOUDFLARE_IP', true );

TRUSTED_PROXY_HEADER

信頼できるプロキシが設定する $_SERVER のキーを指定します。例: HTTP_CF_CONNECTING_IP, HTTP_X_FORWARDED_FOR(信頼できる環境のみ)。

php
// wp-config.php(WordPress ルート)
define( 'TRUSTED_PROXY_HEADER', 'HTTP_CF_CONNECTING_IP' );

環境変数での指定(例)

サーバーやコンテナで環境変数を使う場合の例です。wp-config.php で読み込んでから定数として定義してください。

php
// wp-config.php
if ( getenv( 'USE_CLOUDFLARE_IP' ) === 'true' ) {
	define( 'USE_CLOUDFLARE_IP', true );
}
if ( getenv( 'TRUSTED_PROXY_HEADER' ) !== false ) {
	define( 'TRUSTED_PROXY_HEADER', getenv( 'TRUSTED_PROXY_HEADER' ) );
}

本番環境移行時の注意

  1. デプロイ対象

    • 本プロジェクトのデプロイ対象は core_src 配下と connector.php のみです。
    • wp-config.php は含まれず、本番サーバーの WordPress ルートで別管理です。
  2. プロキシ・CDN 利用時

    • 本番で Cloudflare やリバースプロキシを利用している場合、本番の wp-config.php に USE_CLOUDFLARE_IP または TRUSTED_PROXY_HEADER を追加しないと、レート制限がプロキシの IP(REMOTE_ADDR)でかかります。
    • その結果、同一プロキシ経由の全ユーザーで制限を共有するなど、想定外の挙動になる可能性があります。
  3. 本番移行チェックリスト

    • REST API レート制限で「クライアント単位」の制限を期待する場合は、本番 wp-config.php で上記定数を設定済みか確認することを推奨します。
    • チェック例: 「REST API レート制限でプロキシ IP を使う場合は、本番 wp-config.php で定数を設定済みか」

関連