EC-CUBE Lab
produced by Cajiya
EC-CUBEに関するカスタマイズ方法やトラブルへの対処方法を発信

CloudFrontやロードバランサー経由でも実際のアクセス元IPアドレスをログに記録する方法

公開日: 2025年09月23日 | 更新日: 2025年11月01日
管理画面共通 データ不整合 EC-CUBE 4系全般 設定変更 AWS-ELB

要望や症状

AWS CloudFrontやロードバランサー、クラウド型WAFを使用している環境において、EC-CUBEのログ記録で問題が発生することがあります。

具体的には、/var/log配下のシステムログに実際のアクセス元IPアドレスではなく、CloudFrontのIPアドレスが記録されてしまいます。また、管理画面のログイン履歴においても、本来のアクセス元IPアドレスではなく中間プロキシのIPアドレスが記録される場合があります。この現象は、AWS CloudFront、ロードバランサー、クラウド型WAF等のプロキシを経由してアクセスが行われる環境で顕著に現れます。

理由や原因

この問題の根本的な原因は、EC-CUBEのログ機能におけるIPアドレスの取得方法がX-Forwarded-Forヘッダーを適切に参照していないことにあります。

EC-CUBEでは、管理画面のログイン履歴とシステムログでIPアドレスの取得方法が異なっています。管理画面のログイン履歴ではX-Forwarded-Forヘッダーを参照してIPアドレスを取得する一方で、/var/log配下のシステムログではREMOTE_ADDRを使用してIPアドレスを記録しています。

プロキシを経由したアクセスの場合、REMOTE_ADDRにはプロキシサーバーのIPアドレスが設定され、実際のクライアントIPアドレスはX-Forwarded-Forヘッダーに含まれることになります。この仕様の不統一により、システムログでは実際のアクセス元IPアドレスが正しく記録されない状態となっています。

解決策

システムログにおけるIPアドレス記録を正しく動作させるためには、以下のカスタマイズを実装してください。

イベントリスナーの作成

最初に、app/Customize/EventListener/LogIpAddressListener.phpを作成します。このファイルでは、リクエスト処理の早い段階でX-Forwarded-Forヘッダーから実際のクライアントIPアドレスを取得し、REMOTE_ADDRを適切な値に更新します。

<?php

namespace Customize\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class LogIpAddressListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::REQUEST => ['onKernelRequest', 10]
        ];
    }

    public function onKernelRequest(RequestEvent $event)
    {
        $request = $event->getRequest();
        
        // X-Forwarded-ForヘッダーからクライアントIPを取得
        $forwardedFor = $request->headers->get('X-Forwarded-For');
        if ($forwardedFor) {
            $ips = explode(',', $forwardedFor);
            $clientIp = trim($ips[0]);
            
            // REMOTE_ADDRを上書き
            $request->server->set('REMOTE_ADDR', $clientIp);
        }
    }
}

サービス設定の追加

次に、作成したイベントリスナーをSymfonyのサービスコンテナに登録します。app/Customize/Resource/config/services.yamlに以下の設定を追加してください。

services:
    Customize\EventListener\LogIpAddressListener:
        tags:
            - { name: kernel.event_subscriber }

注意事項

このカスタマイズを実装する際には、いくつかの重要な点を考慮する必要があります。

セキュリティの観点から、X-Forwarded-Forヘッダーは悪意のあるユーザーによって偽装される可能性があるため、信頼できるプロキシからのリクエストのみに適用することを強く推奨します。本カスタマイズは全てのリクエストに影響を与えるため、本番環境に適用する前に十分なテストを実施してください。

また、この問題の根本的な解決については、EC-CUBE本体での対応が検討されており、将来のバージョンアップで解決される可能性があることも付け加えておきます。

免責事項

本記事に掲載しているコードや手順は、執筆時点での情報および特定の環境下での動作確認に基づいています。 EC-CUBEのバージョン、サーバー環境、導入済みプラグインとの競合などにより、予期せぬ不具合が発生する可能性があります。

本記事の内容を実行した結果、生じた損害(データの消失、サイトの停止、機会損失など)について、当サイトおよび管理者は一切の責任を負いかねます。 実装にあたっては、必ずバックアップを取得し、検証環境(テスト環境)での動作確認を行った上で、ご自身の責任において実施してください。

この記事は参考になりましたか?

著者プロフィール: 株式会社カジヤ

当社はWeb業界の専門家として、培った経験や技術、自社事業を通して得た知見を土台に、 お客様の事業の成長を後押しすることを提供価値として活動する、Web事業の成長支援会社です。 EC-CUBE公式のパートナー制度「EC-CUBE インテグレートパートナー」に登録してしており、上位11%にあたる「ゴールドランク」に認定された実績があり、新しい通販サイトの構築から、カスタマイズ、リニューアルまで幅広く対応します。

管理画面共通 の関連記事

管理画面共通 パフォーマンス劣化 EC-CUBE 4系全般
EC-CUBEのlogフォルダ肥大化の管理方法

var/log/prodフォルダ内のログファイルが肥大化し、ディスク容量を圧迫している状況が発生しま...

👍 1 / 👎 0 2025年10月12日
管理画面共通 機能不動作 EC-CUBE 4系全般
.htaccessを使用したIPアドレス制限とメンテナンス画面表示の設定方法

EC-CUBE 4系において、機能リリースなどのタイミングで一般のユーザーにはメンテナンスモードを表...

👍 1 / 👎 0 2025年10月12日
管理画面共通 表示/テンプレート調整 EC-CUBE 4系全般
管理画面左上のEC-CUBEロゴをカスタマイズする方法

管理画面の左上に表示されているEC-CUBEのデフォルトロゴを、自社のロゴに変更したいと考えています...

👍 0 / 👎 0 2025年10月12日
管理画面共通 セキュリティ強化 EC-CUBE 4系全般
ロードバランサー経由でも管理画面IP制限を適用させるカスタマイズ方法

ロードバランサー配下にEC-CUBEサーバを構築している環境で、管理画面IP制限設定を実施しようとす...

👍 0 / 👎 0 2025年10月12日

データ不整合 の関連記事

商品 データ不整合 EC-CUBE 4系全般
EC-CUBEで取り扱い終了商品の削除ができない理由と対応方法

EC-CUBEでは、取り扱いを終了した商品を削除したい場合に、削除ができない状態になることがあります...

👍 1 / 👎 0 2025年10月12日
ポイント データ不整合 EC-CUBE 4系全般
商品の個別ポイント付与率が基本設定より優先される問題の解決方法

EC-CUBE 2系から移行したサイトで、管理画面の基本設定でポイント付与率を変更したにも関わらず、...

👍 0 / 👎 0 2025年09月24日
ポイント データ不整合 EC-CUBE 4系全般
EC-CUBE4系で特定の会員へ個別にポイント付与する方法

特定の会員に対して、購入履歴とは別に個別でポイントを付与したいという要望があります。 ### ...

👍 0 / 👎 0 2025年09月22日

EC-CUBE 4系全般 の関連記事

商品 データ不整合 EC-CUBE 4系全般
EC-CUBEで取り扱い終了商品の削除ができない理由と対応方法

EC-CUBEでは、取り扱いを終了した商品を削除したい場合に、削除ができない状態になることがあります...

👍 1 / 👎 0 2025年10月12日
インストール・セットアップ EC-CUBE 4系全般 設定変更
EC-CUBEサイトのドメイン変更時の設定変更方法

EC-CUBEで構築したサイトを新しいドメインで公開する際に、どのような設定変更が必要かわからない場...

👍 0 / 👎 0 2025年10月12日
メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
サイト全体 500エラー EC-CUBE 4系全般
EC-CUBEでメモリ不足エラーが発生した場合の対処方法

EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。 ### エラー...

👍 1 / 👎 0 2025年10月12日

設定変更 の関連記事

インストール・セットアップ EC-CUBE 4系全般 設定変更
EC-CUBEサイトのドメイン変更時の設定変更方法

EC-CUBEで構築したサイトを新しいドメインで公開する際に、どのような設定変更が必要かわからない場...

👍 0 / 👎 0 2025年10月12日
フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
サイト全体 500エラー EC-CUBE 4系全般
EC-CUBEでメモリ不足エラーが発生した場合の対処方法

EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。 ### エラー...

👍 1 / 👎 0 2025年10月12日
管理画面共通 パフォーマンス劣化 EC-CUBE 4系全般
EC-CUBEのlogフォルダ肥大化の管理方法

var/log/prodフォルダ内のログファイルが肥大化し、ディスク容量を圧迫している状況が発生しま...

👍 1 / 👎 0 2025年10月12日
管理画面共通 機能不動作 EC-CUBE 4系全般
.htaccessを使用したIPアドレス制限とメンテナンス画面表示の設定方法

EC-CUBE 4系において、機能リリースなどのタイミングで一般のユーザーにはメンテナンスモードを表...

👍 1 / 👎 0 2025年10月12日

AWS-ELB の関連記事

フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
管理画面共通 セキュリティ強化 EC-CUBE 4系全般
ロードバランサー経由でも管理画面IP制限を適用させるカスタマイズ方法

ロードバランサー配下にEC-CUBEサーバを構築している環境で、管理画面IP制限設定を実施しようとす...

👍 0 / 👎 0 2025年10月12日