Мы запускаем nginx в системе Debian в качестве балансировщика нагрузки.
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;
....
}
Все запросы передаются на наш сервер приложений. Мы регистрируем request_time
и upstream_time
из nginx.
Недавно мы переключили наше гибридное приложение iOS с UIWebView на WKWebView на 13 неделе, посмотрим, что произошло:
Upstream_time остался прежним, но время нашего запроса внезапно увеличилось, так как все больше и больше пользователей обновляли свое приложение до новой версии.
Сегодня мы решили попробовать отключить http2. Мы только удалили слово «http2» из конфигурации нашего сервера:
server {
listen 443 ssl;
....
}
Посмотрите, что произошло:
Похоже, http2 не готов к производству. Я не знаю, на стороне сервера или на стороне клиента. Возможно, даже request_time неправильно зарегистрирован внутри nginx.
Есть ли у кого-нибудь больше информации об использовании http2 с nginx и / или WKWebView?
Исследования предполагают в пакете 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/
Ожидается, что среднее время ответа будет больше с HTTP / 2, потому что он имеет большие накладные расходы из-за другого уровня мультиплексирования.
Команда IETF отслеживает поддержку клиентов и серверов здесь: https://github.com/http2/http2-spec/wiki/Implementations
WKWebView еще не отмечен как поддерживаемый. Однако он отлично работает в других мобильных браузерах.