【问题标题】:Nginx issues with # in Request HeaderNginx 在请求标头中出现 # 问题
【发布时间】:2017-04-20 07:46:15
【问题描述】:

一些消息总线和 Java 应用程序在其 HTTP 请求中添加请求标头,其中包含哈希。示例:

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 

【问题讨论】:

  • 我实际上不得不检查 RFC 以查看是否允许在标头名称字段中使用 #。原来是这样。至于您的实际问题:您可以尝试使用${http_vendor_user_property_#bmc} 作为扩展吗?
  • 然后 nginx 将 # 识别为注释并抱怨该行没有被分号终止。
  • 好的,最后的努力:\# 而不是 #?
  • 负数,现在标头的值为\#bmc。感谢您对此进行调查!
  • 仍然很有趣。想打开一个错误?

标签: http nginx


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2015-07-06
    • 2021-05-19
    相关资源
    最近更新 更多