nginx 接受 http1 和 http2

Posted

技术标签:

【中文标题】nginx 接受 http1 和 http2【英文标题】:nginx accept both http1 and http2 【发布时间】:2017-02-26 20:06:10 【问题描述】:

我在 tb v45 上构建了一个 Thunderbird 插件,它使用 nsIXMLHttpRequest 和 XMLHttpRequest 从服务器发布和获取数据,服务器已经使用 http2 协议在 nginx 上设置。

日志是

  "POST /service/v2/api HTTP/1.1" 502 1266 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 Lightning/4.7.4"

因此网关不好。我认为这个 http 设置是向后兼容的。

   listen 443 ssl http2 default_server;
   listen [::]:443 ssl http2 default_server;

如何让 nginx 设置接受 http1 或 nsIXMLHttpRequest 发送正确的标头以便它使用 http2?

【问题讨论】:

【参考方案1】:

这真的与标头无关,而是 ngnix 和设置

Thunderbird 不喜欢 http2 设置上的 ssl 证书和密码,在 http1 上很好,所以我不得不在 nginx.conf 中设置它

似乎 Thunderbird 不喜欢某些旧密码,然后对照https://www.ssllabs.com/ssltest/analyze.htm 进行了预修改,发现握手模拟在旧密码上失败了。因此,通过以下设置,我能够让 Thunderbird 正确使用 API 和 SSL 证书。之前我在 Qualys 上的评分为 B,现在它的评分为 A+,一切正常

 ssl_prefer_server_ciphers on;
 ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

【讨论】:

以上是关于nginx 接受 http1 和 http2的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议知识

nginx在代理到upstream时转换http1.1为http1.0,长连接转为短连接

nginx 502

如何禁用响应 nginx 或 apache 或 caddy 中的 http1 请求?

nginx的keepalive源码分析

5.nginx的keepalive和pipe