2013-04-27

mod_proxy モジュールによるリバースプロキシ:URL 中のセミコロンやカンマの扱い

    ProxyPass / http://localhost:9292/
    ProxyPassReverse / http://localhost:9292/

上のようにして Apache にリバースプロキシを設定したところ,クライアント側から要求した URL にセミコロン ; を URL エンコードした %3B が含まれるとき,オリジンサーバ (localhost:9292) に要求される URL はセミコロンの前だけになってしまった.また,カンマ , をエンコードした%2C が含まれるときはこれをデコードした , に置き換えられた URL がオリジンサーバに要求された.

検索により記事『mod_proxyを経由するとURIが勝手にデコードされる - 脱線こそ本道』を見つけた.次のように nocanon を与えて解決した.

    ProxyPass / http://localhost:9292/ nocanon

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html によれば (日本語:http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html),no canonicalization の意.http://en.wikipedia.org/wiki/Canonicalization によれば canonicalization は standardization or normalization の意.また,abbreviated c14n, where 14 represents the number of letters between the C and the Nhttp://en.wiktionary.org/wiki/canonicalize によると語源は canonical + -izeNew Oxford American Dictionary によると canonical は according to or ordered by canon lawaccepted as being accurate and authoritativerelating to a general rule or standard formulahttps://ja.wikipedia.org/wiki/%E6%95%99%E4%BC%9A%E6%B3%95 (英語:https://en.wikipedia.org/wiki/Canon_law) によると canon law は 教会法