Apache環境変数を使用したRequestHeader


13

Apacheをロードバランサーとして設定しています。apacheにX-Forwarded-Protoヘッダーを設定させたかったのですが、これは機能しません。

RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"

ヘッダーはnullに設定されます。理由は何ですか?

回答:


15

遅いが、それでも、私はちょうど同じ問題に対処した、そしてこれは私のために働いた:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

ドキュメントには次のように書かれています:

RequestHeaderディレクティブをadd、append、またはset引数とともに使用する場合、4番目の引数を使用して、アクションが実行される条件を指定できます。env = ...引数で指定された環境変数が存在する場合(または環境変数が存在せず、env =!...が指定されている場合)、RequestHeaderディレクティブで指定されたアクションが有効になります。それ以外の場合、ディレクティブはリクエストに影響しません。

HTTPS環境変数は、SSLを介して要求が行われた場合にのみ設定されます。


3
en.wikipedia.org/wiki/List_of_HTTP_header_fieldsによると、ヘッダーには下線ではなくハイフンが必要です:RequestHeader set X-Forwarded-Proto 'https' env = HTTPSこれはAmazonのELBが送信するヘッダーでもあります。
loevborg 14

9

あなたはそれを望んでいません。ヘッダーを「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>

1
これは、環境変数が機能しない理由の質問にはまだ答えていません。また、ポートとその他の値を保持したかったのですが、その一部はこのようにハードコードできません。
ジョンクレンショー

3

これを修正するには、earlyキーワードを使用します。

RequestHeader set X-Forwarded-Proto "https" early

それ以外の場合は、John Crenshawが提案した、ディレクティブのRewriteRule代わりに使用することを実行できますProxyPass


1
Apacheが実際にこのヘッダーを送信しているかどうかをデバッグするにはどうすればよいですか?
codecowboy

2

原因を見つけました。順序の問題であることがわかりました。mod_rewriteはこれらの環境変数を提供しますが、ApacheはProxyPassリクエストを処理した後まで処理しません。それまでは、nullを設定するだけです。唯一の回避策は、mod_rewriteを介してプロキシを実行することです。

http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160を参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.