nginx add header conditional sur une variable upstream_http_

J'ai un proxy inverse sur nginx qui renvoie quelques sites. J'ai récemment activé HTTP Ssortingct Transport Security pour tous les sites Web compatibles SSL. J'ai maintenant un site qui ne veut pas que cela soit activé.

Je pensais que je ferais simplement un contrôle si mon upstream m'a déjà envoyé un Ssortingct-Transport-Security -header, et sinon, il suffit d'en append un. De cette façon, mon amont pourrait envoyer un en-tête STS contenant max-age=0 pour éviter d'avoir HSTS activé par le proxy.

Je pensais simplement modifier ma configuration comme suit:

 location / { proxy_pass http://webservers; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto "https"; if ($upstream_http_ssortingct_transport_security = "") { add_header Ssortingct-Transport-Security "max-age=15552000"; } } 

Mais, probablement parce que si c'est le mal , cela ne fonctionne pas. J'ai essayé un tas de choses différentes pour s'assurer que la variable existe réellement (ce qui est le cas), mais rien ne semble l'aider.

Comment pourrais-je faire fonctionner cela?

2 Solutions collect form web for “nginx add header conditional sur une variable upstream_http_”

Cela ne fonctionne pas parce que le paramètre if est évalué avant que la request ne soit transmise au backend, de sorte que les variables $ upstream_http_ n'ont pas encore de valeurs. add_header avec une valeur vide est ignoré, vous pouvez donc utiliser une carte pour append conditionnellement l'en-tête comme suit:

 map $upstream_http_ssortingct_transport_security $sts { '' max-age=15552000; } server { location / { add_header Ssortingct-Transport-Security $sts; } } 

C'est parce que if est exécuté avant que le proxy ne se produise et, en ce moment, il n'y a pas de variable $upstream_http_ssortingct_transport_security .

Vous pouvez utiliser la directive header_filter_by_lua partir du module Lua. Par exemple

 header_filter_by_lua 'if not ngx.header["X-Test"] then ngx.header["X-Test"] = "blah" end'; 
  • Reverse proxy pour les services mixtes tcp, udp et http
  • Nginx, wordpress: Impossible de la caching de proxy inverse appropriée en raison de Set-Cookie. Recommandation pour une bonne stratégie
  • Servir un site Web dynamic vers plusieurs domaines
  • Devrait Nginx être devant l'HAPROxy ou le contraire?
  • Proxy inverse sur PFsense, calamar ou autrement
  • Nginx reverse proxy sans terminaison SSL
  • Chrome ignore la directive Set-Cookie du proxy inversé nginx
  • Reverse Proxy To Cloudfront CDN
  • Comment puis-je servir des files statiques avec nginx mais utiliser une URL légèrement différente pour la tornade?
  • 301 redirection avec Squid basé sur l'URL (est-ce que Squirm est le moyen le plus rapide?)
  • Apache Proxy like ProxyPass / http: // nom d'hôte / context de l'application sur l'hôte virtuel
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.