编辑 nginx http 标头

编辑 nginx http 标头

我们正在尝试从 apache 迁移到 nginx,并且我们有一个设置,代理服务器接收 http 标头,对其进行修改并将其转发到后端。这可以通过以下方式使用 apache 轻松完成:

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

但是我找不到在 nginx 配置中使用正则表达式的任何方法。有什么想法吗?

谢谢

答案1

您可以使用语句编辑标题map。请参阅这个文件了解详情。

使用请求标头的示例User-Agent

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

map块位于任何server块之外。使用语句编辑标题proxy_set_header

proxy_set_header User-Agent $user_agent;

答案2

我最终使用此配置来删除开头 ----- START CERTIFICATE -----、结束证书和接收到的客户端证书中的空格。

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 }

并返回该位置的变量:

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;

答案3

我像这样操作标头(nginx):

location / {
    proxy_set_header Origin "https://developer.mozilla.org"; # edit header
    add_header Access-Control-Allow-Origin "*"; # add header
    ...
}

相关内容