nginx как запретить добавление одинаковых значений в один заголовок - PullRequest
0 голосов
/ 28 февраля 2020

Я новичок в nginx и не могу решить эту проблему. (моя nginx версия - 1.17.8).

У меня такая ситуация: пользователь может отправить запрос с заголовком some-id, который является UUID4, и здесь у нас проблема:

  1. Если пользователь отправляет 'some-id:' все в порядке
  2. Если пользователь отправляет 'some-id: "" (просто пусто), тогда я использую отображение, как показано ниже:
map $http_some_id $reqid {
        default   $http_some_id;
        ""        $formatted_id;      # <-- my generated UUID4
}

, а затем использовать его в настройках сервера, как показано ниже:

server {
...
    location ~ /myEndpoint.* {
        proxy_pass <some_address>;
        proxy_set_header some-id $reqid;
    }
}

и он также работает, но:

Если пользователь не отправляет запрос с этим заголовком, то указанное выше решение не добавит заголовок, поскольку кажется, что команда proxy_set_header работает только в том случае, если заголовок уже существует. (Поэтому я проверил, что подобное решение из stackoverflow: ссылка не работает и заголовок будет отсутствовать).

Если вместо использования 'proxy_set_header' я буду использовать просто «add_header» усложняет задачу, потому что тогда в случаях, когда пользователь отправляет заголовок со значением, он добавляет несколько значений в заголовок, даже если эти значения одинаковы, поэтому вывод будет таким, как показано ниже, и я не могу допустить такую ​​ситуацию:

'some-id: value_from_user, same_value_from_user'
Я также проверил, что использование 'add_header', а затем 'proxy_set_header' не работает, и будет работать только первая команда.

Резюме: я не использую никаких дополнительных модулей et c. Чего я хочу добиться:

  • Если пользователь отправит запрос с тегом 'some-id', передайте его без изменений в бэкэнд
  • Если пользователь не добавит тег 'some- id 'Я хочу добавить этот тег со своим пользовательским значением $ reqid
  • Не хочу: отсутствует заголовок some-id, несколько значений в заголовке, пустой заголовок
...