適当なrewrite ruleを使ってproxyする設定を書いた。以下の挙動が2.2と2.4で微妙に違うことに気づいたのでメモ
config
<VirtualHost *:80> ServerName www.test.com SSLProxyEngine On RewriteEngine on RewriteRule ^/(.*) $1 [P,L,QSA] </VirtualHost>
vhostのwww.test.comへのアクセス時にhttp://www.test.com/https://www.google.com
みたいな感じのリクエスト時にRewriteRuleを元にgoogleのtopが表示されるのが期待動作。
2.2 -> 200
< HTTP/1.1 200 OK < Date: Thu, 01 Apr 2021 14:17:03 GMT < Server: gws < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." < X-XSS-Protection: 0 < X-Frame-Options: SAMEORIGIN < Alt-Svc: h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43" < Accept-Ranges: none < Vary: Accept-Encoding < Set-Cookie: 1P_JAR=2021-04-01-14; expires=Sat, 01-May-2021 14:17:03 GMT; path=/; domain=.google.com; Secure < Set-Cookie: NID=212=HzIcDm6x02fFuJ5dT_0LD_Rmwc6YiZCxfz8o-4h0cbQhY4ZvB_A8PBgRL6fh8GVRJCzhRDrI0xqWvmh0h5S1QiwODURn92C8A9NVjTPSOaxJdOojbql5s8DVgqOpJd5uWRfZ0DDZVa_39-zTS0LjegvPM00WGiOHHacnacRGIJI; expires=Fri, 01-Oct-2021 14:17:03 GMT; path=/; domain=.google.com; HttpOnly < Transfer-Encoding: chunked
2.4 -> 301
< HTTP/1.1 301 Moved Permanently < Date: Thu, 01 Apr 2021 14:20:39 GMT < Server: nginx/1.18.0 < Content-Type: text/html; charset=UTF-8 < X-DIS-Request-ID: c9ea127df498f905de72f58aca50d697 < Location: https://www.test.com/https:/www.google.com < Transfer-Encoding: chunked
2.4の方が301になっているがこれはPフラグがうまく機能していない模様。ログをdebugで起動してみると確かにproxyがうまくいっていない。
[Thu Apr 01 14:23:34.393360 2021] [proxy:debug] [pid 9:tid 140575798086456] proxy_util.c(2392): [client 172.17.0.1:61890] AH00944: connecting http://www.test.com/https:/www.google.com to www.test.com:80 [Thu Apr 01 14:23:34.395300 2021] [proxy:debug] [pid 9:tid 140575798086456] proxy_util.c(2615): [client 172.17.0.1:61890] AH00947: connected /https:/www.google.com to www.test.com:80
動作が違う理由は良くわかっていない。ただセキュリティ的に言えば2.2の動作はクライアントの動き次第ではproxy先への攻撃に加担するような形になってしまうので2.4のような動きが正しいのかもしれない。
2.4で同じようなことをするなら一旦キャプチャして改めてフルぱすでproxyするようなconfignになると思う。