さくらのクラウド ウェブアクセラレータでユーザー本来のIPアドレスを取得する

こんにちは、RSPインターネットグループの陸ステです。
(最近ここで更新することが多いですね())

今回は、さくらインターネット株式会社が提供するウェブアクセラレータにて
ユーザー本来のIPアドレスを取得していきます。

ウェブアクセラレータとは

さくらインターネット株式会社が提供する「さくらのクラウド」の中で提供されている
サービスです。CloudflareのFreeプランと同じように基本料金はありませんが、転送量
として1GB辺り5円かかります(極端に転送が多ければCFのほうが良いと思います)。

高速・安定CDN ウェブアクセラレータ | さくらインターネット
ウェブアクセラレータは、突発的なアクセス増加や日々の負荷軽減まで、幅広く気軽にご利用いただけるCDNサービスです。無料お試し可能で、アカウント開設後、すぐに低コストでWebサイトの高速化や、アクセス集中対策を開始することができます。
ユーザー本来のアドレスを取得する

Qiitaの記事、マニュアルを参考にさせていただきましたが、以下のようなコードで問題ないと思います。

# https://freeblog.rspnet.jp/?p=376
// さくらインターネットから受け取ったX-Real-IPをREMOTE_ADDRに変換する
if (isset($_SERVER['HTTP_X_REAL_IP'])){
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

// IPアドレスを取得する
echo $_SERVER['REMOTE_ADDR'];
# https://freeblog.rspnet.jp/?p=376

X-Real-IP変数が使えない等の環境であれば、Qiita記事通りに設定することで設定できると思います(一応コードも貼り付けますが、以下コードは記事より一部引用させていただいております)。

たださくらのクラウド ウェブアクセラレータの場合、X-Forwarded-Forで取得すると
本来のIPアドレスと経由後IPが同時に記載されてしまいます。
例:192.0.2.0, 172.16.89.17等
  ↑本来のIP ↑CDN側のIP

//本来のIPアドレスをREMOTE_ADDRに変換
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

//本来のIPアドレスのみを抽出する
// explodeでカンマ区切りにして分割
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $_SERVER['REMOTE_ADDR'] = explode(",",$_SERVER['HTTP_X_FORWARDED_FOR']);
}

//取得用コード
echo $_SERVER['REMOTE_ADDR'][0];

※コード出典:PHPでリバースプロキシを挟んだアクセス元のIPを取得する方法 (筆者:@sayama0402様
)

最近増えているv6プラス等でポート番号も取得したい場合は、
「X-WebAccel-Viewer-Address」を使うと良いかもれません。
レンタルサーバーという特性上、ログに記載できないので私は使っていません。

ヘッダ値の参考:【TIPS】オリジンのアクセスログにウェブアクセラレータのIPアドレスではなく接続元のIPアドレスを記録したい
ウェブアクセラレータの仕様参考:ウェブアクセラレータとは (概要・仕様)#オリジンサーバ接続時に付与されるリクエストヘッダ
さくらインターネットが提供するマニュアルページ:よくある質問(FAQ)

ちなみに弊組織グループが独自で模索した結果も含まれるため、
「こっちのほうがいいのでは」という案がありましたらお知らせください。

終わり!

最近Cloudflare中心の記事のみだったので、たまにはと思いさくらインターネットが提供する
ウェブアクセラレータで取得する方法を紹介してみました。ご参考になれば幸いです。

それでは、次回は弊組織グループがCloudflare導入後に更新します。
さらだばー!

コメント

トップへ戻る