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'; 
  • Passerelle d'access à distance évolutive pour servers 20K +
  • Est-il possible de configurer HAProxy pour choisir un server backend basé sur l'IP source d'une request? Si c'est le cas, comment?
  • Squid en mode proxy inverse: besoin de réécrire les en-têtes d'hôte
  • Contrôle d'access proxy inversé Apache
  • Apache Rewrite ou Proxy vers le server interne
  • Utilisez openssl s_server comme proxy inverse
  • Nginx plusieurs servers de contenu statique sur les sous-domaines avec url rewrite
  • Une adresse IP interne est apparue dans les journaux de mon site Web
  • Comment puis-je append authentification de base à un proxy apache lors de l'utilisation des en-têtes CORS?
  • Le choix du matériel et les limitations de bande passante sur le proxy inverse NGINX sur un VPS?
  • Est-ce que IIS (idéalement Azure) est-ce que Proxy SSL?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.