Apacheをロードバランサーとして設定しています。 ApacheにX-Forwarded-Protoヘッダーを設定させたいのですが、これは機能しません。
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
ヘッダーはnullに設定されます。なぜだろう?
原因を見つけました。それは操作の順序の問題であることがわかりました。 mod_rewriteはこれらの環境変数を提供する役割を果たしますが、Apacheは、ProxyPass要求を処理した後まで処理しません。それまでは、nullを設定するだけです。唯一の回避策は、mod_rewriteを介してプロキシを行うことです。
参照 http://www.gossamer-threads.com/lists/Apache/users/267160?do=post_view_threaded#26716
遅いが、それでも、私は同じ問題を扱っただけで、これは私にとってはうまくいった:
RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS
documentation はこう言っています:
RequestHeaderディレクティブをadd、append、またはset引数と共に使用する場合、4番目の引数を使用して、アクションが実行される条件を指定できます。 env = ...引数で指定された環境変数が存在する場合(または環境変数が存在せず、env =!...が指定されている場合)、RequestHeaderディレクティブで指定されたアクションが有効になります。それ以外の場合、ディレクティブはリクエストに影響を与えません。
HTTPS環境変数は、リクエストがSSLを介して行われた場合にのみ設定されます。
あなたはそれを望まない。ヘッダーを "HTTP/1.1"に設定します(httpsリクエストでも)-おそらく、あなたが渡そうとしているものにはあまり役に立たないでしょう。
Httpとhttpsに異なるVirtualHostブロックがあります。それぞれのRequestHeader
設定をハードコードするだけです。
<VirtualHost *:80>
RequestHeader set X-Forwarded-Proto "http"
...
</VirtualHost>
<VirtualHost *:443>
RequestHeader set X-Forwarded-Proto "https"
...
</VirtualHost>
early
キーワードを使用してこれを修正できます:
RequestHeader set X-Forwarded-Proto "https" early
それ以外の場合は、RewriteRule
ディレクティブの代わりにProxyPass
を使用して、John Crenshawが提案したことを実行できます。