nginx反向代理HTTP/2报协议错误

curl报的错误如下

curl: (92) Invalid HTTP header field was received: frame type: 1, stream: 1, name: [upgrade], value: [h2,h2c]

用浏览器的话也会报连接错误
造成这种问题的原因是反向代理的上游开启了HTTP/2,然后nginx通过HTTP/1.1与上游连接,这样上游返回的报文中就会添加Upgrade头来要求升级到HTTP/2连接。
知道了原因就好解决了,可以采取以下方法

  • 关闭上游服务器的HTTP/2

  • 使用HTTP/2或H2C与上游连接

    nginx不支持

  • 过滤Upgrade头

    proxy_hide_header Upgrade;

发表回复