2017-04-20 137 views
0

某些消息总线和Java应用程序将请求标头添加到其HTTP请求中,并在其中包含一个散列。例如:Nginx问题请求标头中的#

Vendor-User-Property-#BMC: 1234 

看来NGINX不与proxy_pass请求一起传递,报头。我试图重写标题:

proxy_set_header Vendor-User-Property-BMC "$http_vendor_user_property_#bmc"; 

但不幸的是这不是一个有效的变量,它只是将字符串值#bmc

有没有一种方法可以通过proxy_pass传递这些未经修改的头文件或以任何方式获取这些头文件的值?用于测试

curl命令:

curl -H "Vendor-User-Property-#BMC: 123" http://domain.tld 
+0

其实我有检查回来的RFC文档,以查看是否#允许在头名场。原来是这样。至于你的实际问题:你可以尝试使用'$ {http_vendor_user_property_#bmc}'作为扩展吗? – DaSourcerer

+0

然后nginx将#识别为注释并且抱怨这行不会被分号终止。 – Boris

+0

好吧,最后的努力:'\#'而不是'#'? – DaSourcerer

回答

0

原来有一个在nginx的直接没有真正的解决方案。我最终在nginx之前放置了一个HAProxy,并重写了HTTP头以替换#字符。

http-request set-header Vendor-User-Property-BMC %[req.hdr("Vendor-User-Property-#BMC")]