nginx добавить заголовок условно на переменную upstream_http_

У меня есть обратный прокси-сервер на nginx, который проксирует несколько сайтов. Недавно я включил HTTP Strict Transport Security для всех сайтов с поддержкой SSL. У меня теперь есть один сайт, который не хочет, чтобы это было включено.

Я думал, что просто сделаю простую проверку, если мой upstream уже отправил мне код Strict-Transport-Security -header, а если нет, просто добавьте один. Таким образом, мой upstream мог отправить заголовок 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";
        }
}

Но, возможно, потому что если злой , это не работает. Я попробовал кучу разных вещей, чтобы убедиться, что переменная фактически существует (в данном случае), но ничего не помогает.

Как я могу сделать эту работу?

12 голосов | спросил Gerry 23 Maypm14 2014, 17:04:57

2 ответа


17

Это не работает, потому что if оценивается до того, как запрос передается на бэкэнд, поэтому переменные $ upstream_http_ еще не имеют значений. add_header с пустым значением игнорируется, поэтому вы можете использовать карту , чтобы условно добавить заголовок следующим образом:

map $upstream_http_strict_transport_security $sts {
  '' max-age=15552000;
}

server {
  location / {
    add_header Strict-Transport-Security $sts;
  }
}
ответил kolbyjack 23 Maypm14 2014, 18:04:05
3

Это потому, что + +: = 0 =: + ---- выполняется перед прокси-сервером, и в данный момент нет переменной if

Вы можете использовать $upstream_http_strict_transport_security из модуля Lua. Например.

header_filter_by_lua
ответил Alexey Ten 23 Maypm14 2014, 18:02:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132