<< Piece_Unityユーザーズマニュアル

Configurator_Proxyプラグイン

(Piece_Unity >= 0.12.0)

概要

Piece_Unity_Contextオブジェクトで保持されている現在のリクエストのベースパスとスクリプト名を調整するためのコンフィギュレータ

このコンフィギュレータは、アプリケーションが動作しているWebサーバが、リバースプロキシサーバのバックエンドサーバとして使用されている場合に使われます。そして、その場合のみ動作します。

コンポーネント

Piece_Unity

説明

boolean invoke (void)

リバースプロキシサーバのバックエンドサーバ上で動作しているアプリケーションは、クライアントに示されるURL(フロントエンドURL)と、アプリケーションが認識しているURL(バックエンドURL)が異なります。例えば、下記のようなマッピングを考えてみてください。

フロントエンドURLhttp://example.org/foo/bar/baz.php
バックエンドURLhttp://foo.example.org/bar/baz.php

実際のアプリケーション開発においては、ポータビリティのためホスト名は省略される場合が多いため、

フロントエンドURL/foo/bar/baz.php
バックエンドURL/bar/baz.php

のようにホスト名は無視して考えることができます。

上記は、Locationヘッダ、クッキーのパス、HTML内のリンクといった、クライアントに返されるレスポンスに含まれるパスは、http://example.org/foo/bar/baz.php なのにもかかわらず、アプリケーションが認識しているパスは、http://foo.example.org/bar/baz.php という状況を示しています。バックエンドURLをフロントエンドURLに変換するには、バックエンドURLの先頭に/fooという文字列を付与ししなければなりません。

このプラグインは、上記のようなパスを自動的に調整します。設定ポイントproxyPathに、パスのうちリバースプロキシサーバ側に付与される部分(上記の例では/foo)を設定することで、この文字列をバックエンドURLの先頭に付与します。

オリジナル(バックエンドURL)調整後(フロントエンドURLに相当)
ベースパス/bar/foo/bar
スクリプト名/bar/baz.php/foo/bar/baz.php

調整後の値は、Piece_Unity_ContextオブジェクトのgetBasePath(), getScriptName(), getAppRootPath()から取得することができます。(これらのメソッドは、このプラグインを使うかどうかにかかわらず、それぞれのパスの取得のために使われます。)

アプリケーションで使われるパスを、これらのメソッド(及び、これらのメソッド由来のビューエレメント__basePath/__scriptName/__appRootPath)に統一しておくと、このプラグインによって、動作環境の違いによるパスの相違問題を、簡単に解決することができます。

なお、このプラグインは、アプリケーションがリバースプロキシ環境で動作しているかどうかの判断を、サーバ変数に以下の値のいずれかが含まれているかによって行います。含まれていない場合は調整を行いません。

  • HTTP_X_FORWARDED_FOR
  • HTTP_X_FORWARDED
  • HTTP_FORWARDED_FOR
  • HTTP_FORWARDED
  • HTTP_VIA
  • HTTP_X_COMING_FROM
  • HTTP_COMING_FROM

リバースプロキシサーバ使用時の調整が必要なパスとその対策

このプラグインによって、リバースプロキシサーバ使用時のすべてのパス問題が解決するわけではありません。参考までに、下記に調整が必要なパスとその対策の一例を示します。

調整が必要なパスConfigurator_Proxyによる対策 Apacheによる対策
LocationヘッダNGProxyPassReverseディレクティブ
セッションクッキーのパスadjustSessionCookiePathProxyPassReverseCookiePathディレクティブ (Apache 2.2以降)
セッションクッキーのドメインNG(ただしドメインを設定しない場合は対策不要)ProxyPassReverseCookieDomainディレクティブ
HTML内に含まれるリンクPiece_Unity_Context::getBasePath()/getScriptName()/getAppRootPath()mod_proxy_htmlモジュール
HTML以外のレスポンスボディに含まれるリンクPiece_Unity_Context::getBasePath()/getScriptName()/getAppRootPath()NG

拡張ポイント

拡張ポイントはありません。

設定ポイント

proxyPath

(Piece_Unity >= 0.12.0)

概要

アプリケーションのURLパスのうちリバースプロキシサーバ側に付与される部分

デフォルト値

null

説明

リバースプロキシサーバ使用時に、proxyPathが設定されていると、バックエンドサーバが取り扱うURLの先頭にその値が付与されます。これにより、アプリケーションがリバースプロキシサーバ側から実行された場合でも、デバッグ等で直接バックエンドサーバで実行された場合でも、アプリケーションの設定やアプリケーション内で使われるURLを一切変更する必要がなくなります。

設定ポイント

adjustSessionCookiePath

(Piece_Unity >= 0.12.0)

概要

セッションクッキーのパス(PHP設定session.cookie_pathの値)を調整します

デフォルト値

true

説明

adjustSessionCookiePathの値によって、PHP設定session.cookie_pathの値の調整も併せて行うかどうかが決定されます。デフォルトはtrue(調整する)です。

ソースコード

Piece/Unity/Plugin/Interceptor/ProxyBasePath.php


<< Piece_Unityユーザーズマニュアル

ユーザコメント

Error: Failed to load processor AddComment
No macro or processor named 'AddComment' found