J'ai un proxy inverse sur nginx qui proxie pas mal de sites. J'ai récemment activé HTTP Strict 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 une simple vérification si mon amont m'a déjà envoyé un en- Strict-Transport-Security
tête, et sinon, j'en ajouterais 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 que je changerais simplement 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_strict_transport_security = "") {
add_header Strict-Transport-Security "max-age=15552000";
}
}
Mais, probablement parce que si c'est mal , cela ne fonctionne pas. J'ai essayé un tas de choses différentes pour m'assurer que la variable existe réellement (ce qui est le cas), mais rien ne semble aider.
Comment pourrais-je faire fonctionner cela?
la source
C'est parce que
if
est exécuté avant que le proxy ait lieu et à ce moment il n'y a pas de variable$upstream_http_strict_transport_security
.Vous pouvez utiliser la
header_filter_by_lua
directive du module Lua. Par exemplela source
apt-get -t wheezy-backports install nginx-extras
.