web-dev-qa-db-ja.com

Apache 2.4でのX-Forwarded-Protoの設定

セッション/ csrfトークンの問題を解決するには、RequestHeader X-Forwarded-Protoアプリケーション(NodeBB)にnode.jsを設定する必要があるとアドバイスされました。

ここに私のApache2設定からの関連する抜粋があります:

ProxyRequests off

<Proxy *>
    Order allow,deny
    Allow from all

</Proxy>
    RewriteEngine On

RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://127.0.0.1:4566/$1 [P,L]

RequestHeader set X-Forwarded-Proto "http"

ProxyPass / http://127.0.0.1:4566/
ProxyPassReverse / http://127.0.0.1:4566/

Apacheバージョンは2.4.7です

デバッグプロキシを介して、応答に次のヘッダーが表示されます。

HTTP/1.1 200 OK
Date: Wed, 03 Aug 2016 06:55:15 GMT
Server: Apache
X-Powered-By: Express
X-Frame-Options: SAMEORIGIN
Access-Control-Allow-Origin: null
Content-Type: text/html; charset=utf-8
ETag: W/"3626-ETnKpHnKC8ul87CmR6NFUg"
Vary: Accept-Encoding
Content-Encoding: gzip
set-cookie: express.sid=s%3AYq3UdEAd4Cbwhc4-pMTrqqEp8ftUDeiu.CdipRmQptJlhnUG8ZhCSYgq%2FpCR0Kdmqx3Lrm5ABiSc; Domain=removed.com; Path=/; Expires=Wed, 17 Aug 2016 06:55:15 GMT; HttpOnly
Cache-Control: max-age=0, no-store
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked

私はそれがExpress js、つまりノードアプリから来ていると思いますが、私の理解では、Apacheプロキシディレクティブはリクエストヘッダーを渡して表現する必要があるため、応答にX-Forwarded-Protoヘッダーも表示する必要があるかどうかわかりませんも。

2
codecowboy

このディレクティブを次のように設定するのは正しいことです

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}

動作しない場合は、モジュールmod_headersをインストールして有効にする必要があります。

7
spaceone

表示されている応答ヘッダーは正常に見えます。それらのX-Forwarded-Protoヘッダーに期待しないでください。

述べているように、リクエストがバックエンドにプロキシされると、そのヘッダーが設定されます。そのヘッダーを表示するには、バックエンドコードでヘッダーを検索し、値を記録する必要があります。

ヘッダーを正しく設定しているようです。

2