Я новичок в nginx и не могу решить эту проблему. (моя nginx версия - 1.17.8).
У меня такая ситуация: пользователь может отправить запрос с заголовком some-id, который является UUID4, и здесь у нас проблема:
- Если пользователь отправляет 'some-id:' все в порядке
- Если пользователь отправляет '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, несколько значений в заголовке, пустой заголовок