J'ai été informé que je devais définir le RequestHeader X-Forwarded-Proto
pour une application node.js
(NodeBB) afin de résoudre un problème lié aux jetons sessions/csrf.
Voici l'extrait pertinent de ma configuration 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/
La version d'Apache est 2.4.7
à travers un proxy de débogage, je peux voir les en-têtes suivants dans la réponse
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
Je pense que cela provient d'Express js, c'est-à-dire de l'application de nœud, mais je crois comprendre que les directives de proxy Apache doivent transmettre un en-tête de demande à être exprimé. Je ne sais pas si je devrais également voir l'en-tête X-Forwarded-Proto
dans la réponse. aussi.
Il est correct de définir cette directive comme
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
Si cela ne fonctionne pas, vous devrez peut-être installer et activer le module mod_headers
.
Les en-têtes de réponse que vous voyez vont bien. Vous ne devez pas vous attendre à ce que l'en-tête X-Forwarded-Proto
en soit contenu.
Comme vous le dites, cet en-tête est défini lorsque la demande est envoyée au serveur principal. Pour voir cet en-tête, vous devez demander au code d’arrière-plan de le rechercher et d’enregistrer la valeur.
Il semble que vous définissiez l'en-tête correctement.