Pourquoi nginx $ scheme et $ https sont-ils toujours "sécurisés" même lorsque la request n'est pas?

J'essaie de configurer un proxy inverse pour une application qui gère HTTPS se redirection elle-même (c'est-à-dire si elle constate que le protocole n'est pas HTTPS, il redirige l'user vers un site sécurisé):

server { listn 80 default_server; listn 443 ssl; location / { proxy_pass http://localhost:8080; proxy_redirect default; proxy_redirect https://$proxy_host/ https://$host/; proxy_set_header X-Forwarded-Proto $scheme; } } 

Le server en amont doit savoir si la request originale était sur https ou non, ce qu'elle devrait savoir via l'en-tête X-Forwarded-Proto, en supposant que $scheme soit "http" sur 80 et "https" sur 443.

Cependant, il semble que, pour les requests à la fois 443 et le port 80, $scheme set est défini sur "https" et $https réglé sur "on" toujours – c'est-à-dire que ces variables disent toujours que la connection est sécurisée même si elle n'est PAS? Est-ce que ces variables sont "codées en dur" en fonction de la configuration du server, et non de la request entrante réelle?

One Solution collect form web for “Pourquoi nginx $ scheme et $ https sont-ils toujours "sécurisés" même lorsque la request n'est pas?”

Ma faute. nginx définit $scheme (et vraisemblablement $https ) comme je l'espère, par request.

Le problème était le code node.js suivant:

 var proto = req.headers['x-forwarded-proto'] || (req.connection.encrypted) ? 'https' : 'http'; 

Il semble correct, mais la priorité de l'opérateur est en fait fausse! Devrait être quelque chose comme:

 var proto = req.headers['x-forwarded-proto'] || ((req.connection.encrypted) ? 'https' : 'http'); 

Sans le correctif, chaque fois que les req.headers['x-forwarded-proto'] étaient présents, mon proto local serait réglé sur "https" même si l'en-tête de nginx était correct!

  • Quelle est la différence entre Nginx ~ et ~ * regexes?
  • application run.js en cours avec nginx
  • Problème de positionnement de Nginx
  • Ressortingction de plusieurs directorys dans les mêmes plages IP
  • HAPROxy URL réécrit sur erreur 404
  • Comment puis-je laisser nginx enregistrer le protocole SSL / TLS utilisé et ciphersuite?
  • Nginx sert un file simple s'il existe d'autres servez /index.php
  • Nginx + Wordpress langue de redirection
  • nginx en tant que proxy ssl inverse (Apache + vernis) saute sa propre configuration
  • Est-il sécuritaire pour les différents servers nginx de partager des journaux?
  • Nginx: Comment configurer 'limit_conn' et 'limit_req'?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.