Apacheをロードバランサーとして設定しています。apacheにX-Forwarded-Protoヘッダーを設定させたかったのですが、これは機能しません。
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
ヘッダーはnullに設定されます。理由は何ですか?
Apacheをロードバランサーとして設定しています。apacheにX-Forwarded-Protoヘッダーを設定させたかったのですが、これは機能しません。
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
ヘッダーはnullに設定されます。理由は何ですか?
回答:
遅いが、それでも、私はちょうど同じ問題に対処した、そしてこれは私のために働いた:
RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS
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
それ以外の場合は、John Crenshawが提案した、ディレクティブのRewriteRule
代わりに使用することを実行できますProxyPass
。
原因を見つけました。順序の問題であることがわかりました。mod_rewriteはこれらの環境変数を提供しますが、ApacheはProxyPassリクエストを処理した後まで処理しません。それまでは、nullを設定するだけです。唯一の回避策は、mod_rewriteを介してプロキシを実行することです。
http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160を参照してください