我们正在尝试从 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
...
}