Nginx 与 http2 和 ios WKWebView

Nginx 与 http2 和 ios WKWebView

我们在 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 中正确记录。

有谁有更多关于使用 http2 与 nginx 和/或 WKWebView 的信息吗?

答案1

研究表明Ubuntu/Debian nginx 包中有一个错误,导致 http2 性能低下, 你需要使用替代分布/自己从源代码编译 nginx(这真的很容易,只需要花费您 5 分钟的时间)。

对于 Debian,你可能需要替换该配置行在该建筑指南中类似这样的内容:

 ./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 或更高版本,否则它就不够新。下面是一个应该可以做到的: https://ethitter.com/2016/06/nginx-openssl-1-0-2-http-2-alpn/

答案2

HTTP/2 的平均响应时间预计会更长,因为它由于另一层多路复用而具有更大的开销。

答案3

IETF 团队正在此处跟踪客户端和服务器支持情况:https://github.com/http2/http2-spec/wiki/Implementations

WKWebView 尚未被标记为受支持。但它在其他移动浏览器上运行良好。

相关内容