IIS 7.5、Application Request Routing 3.0 (ARR)、およびURL Rewrite 2.0を使用してJenkinsのリバース プロキシを設定しようとしています。
プロキシはほとんど機能していますが、パーセント記号 (%) を含む URL で問題が発生しています。
私が何をしようとしても、プロキシは、書き換えられた URL のパーセント記号を逆エンコードまたは再エンコードすることを要求します。
これは、URL を書き換える方法です。
http://my.proxy/a%2Fb -> http://my.host:8080/a%2Fb
これは、URL が実際に書き換えられている方法です。
http://my.proxy/a%2Fb -> http://my.host:8080/a/b
- or -
http://my.proxy/a%2Fb -> http://my.host:8080/a%252Fb
IIS\ARR\Rewrite を取得して、書き換えた URL の再エンコードを停止するにはどうすればよいですか?
私が試したこと:
通常のリバース プロキシ (URL を のように書き換えます
http://my.host:8080/a/b
):<rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" ignoreCase="true" /> <action type="Rewrite" url="http://my.host:8080/{R:1}" /> </rule>
サーバー変数を使用する
UNENCODED_URL
(URL を に書き換えますhttp://my.host:8080/a%252Fb
):<rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{UNENCODED_URL}" pattern="/(.*)" /> </conditions> <action type="Rewrite" url="http://my.host:8080/{C:1}" /> </rule>
URL を直接入力するだけです (テストとして - URL を のように書き換えます
http://my.host:8080/a%252Fb
):<rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" ignoreCase="false" /> <action type="Rewrite" url="http://my.host:8080/a%2Fb" /> </rule>
Scott Hanselman の優れた「風変わりな実験: ASP.NET/IIS 要求 URL でパーセント、山かっこ、およびその他のいたずらを許可する」のすべてのアイデア
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="*,:,&,\" relaxedUrlToFileSystemMapping="true" />
<security> <requestFiltering allowDoubleEscaping="true" /> </security>'
注: IIS リバース プロキシが、この形式の URL への HTTP リダイレクトを実行しようとするJenkins の組み込みリバース プロキシ チェック システムに違反したときに、この動作に遭遇しました。