Подтвердить что ты не робот

Как я могу добавить заголовок условно в конфигурации nginx?

Как я могу добавить заголовок условно в конфигурации nginx (1.4.6 ubuntu)?

Сначала я пробовал вот так.

 location / {
      add_header X-TEST-0 always-0;

      set $true 1;
      if ($true) {
          add_header X-TEST-1 only-true;
      }

      add_header X-TEST-2 always-2;
  }    

Хотя я ожидал, что мой nginx установит весь заголовок (X-TEST-0,1,2), он добавил только заголовок X-TEST-1.

Далее я пробовал вот так.

 location / {
      add_header X-TEST-0 always-0;

      ##set $true 1;
      ##if ($true) {
      ##    add_header X-TEST-1 only-true;
      ##}

      add_header X-TEST-2 always-2;
  }    

Мой nginx добавил заголовок X-TEST-1 и X-TEST-2, как я ожидал.

Мои кавычки...

  • Как я могу добавить заголовок условно?

  • Почему nginx добавляет только X-TEST-1 с моим первым примером выше?

Спасибо заранее!

4b9b3361

Ответ 1

(Я бы написал этот вывод для людей, у которых будет тот же вопрос в будущем. Спасибо @Alexey Ten за информацию.)

Вывод:

Не используйте директивы non-rewrite внутри директив if. Поскольку директива if по существу является частью модуля перезаписи.

Мы могли бы получить более подробную информацию об этом в официальном документе с именем IfIsEvil.

Ответ 3

Это просто, если вы думаете по-другому и используете карту.

map $variable  $headervalue {
    1        only-true;
    default  '';
}

# ...later...
location / {
    add_header X-TEST-1   $headervalue;
}

Если $ variable равен 1, будет установлено значение $ headervalue и, следовательно, будет добавлен заголовок. По умолчанию $ headervalue будет пустым и заголовок не будет добавлен.

Это эффективно, потому что Nginx оценивает карту только тогда, когда это необходимо (когда он достигает точки, где указывается значение $ headervalue).

Увидеть аналогичные: https://serverfault.com/info/598085/nginx-add-header-conditional-on-an-upstream-http-variable