У меня есть обратный прокси-сервер на Nginx, который прокси-сервер довольно много сайтов. Недавно я включил HTTP Strict Transport Security для всех сайтов с поддержкой SSL. Теперь у меня есть один сайт, который не хочет, чтобы это было включено.
Я подумал, что просто сделаю простую проверку, если мой апстрим уже отправил мне Strict-Transport-Security
заголовок, а если нет, просто добавлю. Таким образом, мой апстрим мог послать заголовок STS, содержащий, max-age=0
чтобы избежать включения HSTS прокси.
Я думал, что я просто изменил бы мою конфигурацию следующим образом:
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";
}
}
Но, вероятно, потому что, если это зло , это не работает. Я пробовал кучу разных вещей, чтобы убедиться, что переменная действительно существует (что имеет место), но ничего не помогает.
Как я мог сделать эту работу?
источник
Это потому, что
if
выполняется до того, как прокси будет иметь место, и в этот момент нет никакой переменной$upstream_http_strict_transport_security
.Вы можете использовать
header_filter_by_lua
директиву из модуля Lua. Напримеристочник
apt-get -t wheezy-backports install nginx-extras
.