我们在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; .... }
所有请求代理到我们的应用程序服务器。 我们正在logging来自nginx的request_time和upstream_time 。
我们在第13周将我们的iOS混合应用从UIWebView切换到了WKWebView,看看发生了什么:
upstream_time保持不变,但随着越来越多的用户将其应用程序更新到新版本,我们的请求时间突然提高。
今天我们决定尝试一下,并停用http2。 我们只从服务器configuration中删除了“http2”这个词:
server { listen 443 ssl; .... }
看看发生了什么:
看来http2不是生产准备好的。 我不知道是服务器端还是客户端。 也许即使request_time没有正确logging在nginx里面。
有没有人有关于使用http2与nginx和/或WKWebView的更多信息?
研究表明,Ubuntu / Debian的nginx包中有一个导致http2性能低下的bug ,你需要自己从源代码中 使用替代的分发 / 编译nginx (这很容易,需要5分钟的时间)。
对于debian,你可能不得不用这个指导来replace那个configuration指令:
./configure --with-cc-opt='-march=native -O2 -pipe' --prefix=/usr --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-pcre-jit --with-ipv6 --with-file-aio --with-ipv6 --with-http_v2_module --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module -with-http_v2_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --user=www-data --group=www-data --with-openssl=../openssl-1.0.2h --add-module=../nginx-http-auth-digest --add-module=../ngx_cache_purge --add-module=../ngx_pagespeed-release-1.11.33.2-beta
或者只是使用互联网上最近的任何指南。 它必须在OpenSSL 1.0.2h版本或更高版本中构build,或者只是不够近。 这是一个应该做的: 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没有标记为受支持。 它在其他移动浏览器上工作正常。