我们在 debian 系统上运行 nginx 作为负载均衡器
nginx version: nginx/1.9.10
built with OpenSSL 1.0.2e 3 Dec 2015 (running with OpenSSL 1.0.2g 1 Mar 2016)
我们在服务器中激活了 http2,如下所示:
server {
listen 443 ssl http2;
....
}
所有请求都代理到我们的应用程序服务器。我们正在从 nginx记录request_time
和。upstream_time
我们最近在第 13 周将我们的 iOS 混合应用从 UIWebView 切换到了 WKWebView,看看发生了什么:
upstream_time 保持不变,但随着越来越多的用户将他们的应用程序更新到新版本,我们的请求时间突然增加。
今天我们决定试一试并停用http2。我们只从服务器配置中删除了“http2”这个词:
server {
listen 443 ssl;
....
}
看看发生了什么:
似乎 http2 还没有准备好生产。我不知道它是服务器端还是客户端。也许甚至 request_time 也没有在 nginx 中正确记录。
有人有更多关于在 nginx 和/或 WKWebView 中使用 http2 的信息吗?
研究表明Ubuntu/Debian nginx 软件包中存在导致 http2 性能低下的错误,您需要使用替代发行版/自己从源代码编译 nginx(这真的很容易,大约需要 5 分钟的时间)。
对于 debian,您可能必须将该构建指南中的配置行替换为以下内容:
或者只是使用互联网上的任何最新指南。它必须使用 OpenSSL 1.0.2h 或更高版本进行构建,或者它不够新。这是应该做的: https ://ethitter.com/2016/06/nginx-openssl-1-0-2-http-2-alpn/
HTTP/2 的平均响应时间预计会更长,因为由于另一层多路复用,它具有更大的开销。
IETF 团队在此处跟踪客户端和服务器支持:https ://github.com/http2/http2-spec/wiki/Implementations
WKWebView 尚未标记为受支持。不过,它在其他移动浏览器上运行良好。