セッション/ 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
ヘッダーも表示する必要があるかどうかわかりませんも。
このディレクティブを次のように設定するのは正しいことです
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
動作しない場合は、モジュールmod_headers
をインストールして有効にする必要があります。
表示されている応答ヘッダーは正常に見えます。それらのX-Forwarded-Proto
ヘッダーに期待しないでください。
述べているように、リクエストがバックエンドにプロキシされると、そのヘッダーが設定されます。そのヘッダーを表示するには、バックエンドコードでヘッダーを検索し、値を記録する必要があります。
ヘッダーを正しく設定しているようです。