web-dev-qa-db-fra.com

Définition de X-Forwarded-Proto sous Apache 2.4

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.

2
codecowboy

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.

7
spaceone

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.

2