редактирование HTTP-заголовков nginx

мы пытаемся перейти с apache на nginx, и у нас есть настройка, в которой прокси-сервер получает заголовок http, изменяет его и пересылает на бэкэнд. Это легко сделать с помощью apache следующим образом:

                Header edit* Custom_Header  "(String_To_Replace)" "Replacement"

Однако я не могу найти способ использовать регулярное выражение в конфигурации nginx. Есть идеи?

спасибо

1
задан 9 March 2020 в 12:51
3 ответа

Вы можете редактировать заголовки с помощью оператора map . Подробнее см. этот документ .

Пример использования заголовка запроса User-Agent .

map $http_user_agent $user_agent {
    default $http_user_agent;
    ~^(?<prefix>.*)Gecko(?<suffix>.*)$ "${prefix}Lizard$suffix";
}

Блок map размещается вне любого блок сервера . Отредактируйте заголовок с помощью оператора proxy_set_header :

proxy_set_header User-Agent $user_agent;
0
ответ дан 30 March 2020 в 00:20

В итоге я использовал эту конфигурацию, чтобы удалить начало ----- НАЧАЛЬНЫЙ СЕРТИФИКАТ -----, конечный сертификат и пробелы в полученном сертификате клиента.

map $ssl_client_raw_cert $a { "~^(-.*-\n)(?<main>[^\n]+)\n((?<b>[^\n]+)\n)?((?<c>[^\n]+)\n)?((?<d>[^\n]+)\n)?((?<e>[^\n]+)\n)?((?<f>[^\n]+)\n)?((?<g>[^\n]+)\n)?((?<h>[^\n]+)\n)?((?<i>[^\n]+)\n)?((?<j>[^\n]+)\n)?((?<k>[^\n]+)\n)?((?<l>[^\n]+)\n)?((?<m>[^\n]+)\n)?((?<n>[^\n]+)\n)?((?<o>[^\n]+)\n)?((?<p>[^\n]+)\n)?((?<q>[^\n]+)\n)?((?<r>[^\n]+)\n)?((?<s>[^\n]+)\n)?((?<t>[^\n]+)\n)?((?<v>[^\n]+)\n)?((?<u>[^\n]+)\n)?((?<w>[^\n]+)\n)?((?<x>[^\n]+)\n)?((?<y>[^\n]+)\n)?((?<z>[^\n]+)\n)?((?<ab>[^\n]+)\n)?((?<ac>[^\n]+)\n)?((?<ad>[^\n]+)\n)?((?<ae>[^\n]+)\n)?((?<af>[^\n]+)\n)?((?<ag>[^\n]+)\n)?((?<ah>[^\n]+)\n)?((?<ai>[^\n]+)\n)?((?<aj>[^\n]+)\n)?((?<ak>[^\n]+)\n)?((?<al>[^\n]+)\n)?((?<am>[^\n]+)\n)?((?<an>[^\n]+)\n)?((?<ao>[^\n]+)\n)?((?<ap>[^\n]+)\n)?((?<aq>[^\n]+)\n)?((?<ar>[^\n]+)\n)?((?<as>[^\n]+)\n)?((?<at>[^\n]+)\n)?((?<av>[^\n]+)\n)?((?<au>[^\n]+)\n)?((?<aw>[^\n]+)\n)?((?<ax>[^\n]+)\n)?((?<ay>[^\n]+)\n)?((?<az>[^\n]+)\n)?((?<ba>[^\n]+)\n)?((?<bb>[^\n]+)\n)?((?<bc>[^\n]+)\n)?((?<bd>[^\n]+)\n)?((?<be>[^\n]+)\n)?((?<bf>[^\n]+)\n)?((?<bg>[^\n]+)\n)?((?<bh>[^\n]+)\n)?((?<bi>[^\n]+)\n)?((?<bj>[^\n]+)\n)?((?<bk>[^\n]+)\n)?((?<bl>[^\n]+)\n)?((?<bm>[^\n]+)\n)?((?<bn>[^\n]+)\n)?((?<bo>[^\n]+)\n)?((?<bp>[^\n]+)\n)?((?<bq>[^\n]+)\n)?((?<br>[^\n]+)\n)?((?<bs>[^\n]+)\n)?((?<bt>[^\n]+)\n)*(-.*-)$"
$main }

и вернул vars в расположении:

proxy_set_header WL-Proxy-Client-Cert $a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$v$u$w$x$y$z$ab$ac$ad$ae$af$ag$ah$ai$aj$ak$al$am$an$ao$ap$aq$ar$as$at$au$av$aw$ax$ay$ax$ba$bb$bc$bd$be$bf$bg$bh$bi$bj$bk$bl$bm$bn$bo$bp$bq$br$bs$bt;
0
ответ дан 30 March 2020 в 00:20

Я управляю заголовками следующим образом (nginx):

location / {
    proxy_set_header Origin "https://developer.mozilla.org"; # edit header
    add_header Access-Control-Allow-Origin "*"; # add header
    ...
}
0
ответ дан 30 March 2020 в 00:20

Теги

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