Nginx HTTP2 IOS 11 funktioniert nicht

7

Ich habe Probleme mit dem HTTP2-Protokoll auf meinem NGINX-Server. Dies ist meine Konfiguration

listen 443 ssl http2;
server_name adomain.com;
root /var/www/project;

limit_req   zone=one  burst=60 nodelay;

add_header Strict-Transport-Security "max-age=2592000; includeSubdomains;" always;
ssl_certificate     /etc/letsencrypt/live/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/privkey.pem;
ssl_protocols   TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

resolver 8.8.8.8;
ssl_stapling on;
ssl_stapling_verify on;

keepalive_timeout   70;

Ich kann den Fehler auf meinem iOS-Gerät (Safari 11) nicht sehen. Es ist sehr seltsam, dass die Webseite ein SPA (eckig) ist, bei dem die App Anforderungen an eine API stellt. Die Apps werden über HTTP2 geladen, aber wenn die App Anforderungen an die API stellen muss Wenn die API fehlschlägt und HTTP2 deaktiviert, funktioniert listenalles wie erwartet

Die Chiffren für das Frontend / Backend beider Server sind gleich

In Chrome / Firefox / IE funktioniert gut, ich weiß nicht, was mit Safari oder meiner Serverkonfiguration falsch ist

Das error.log und das adomain-error.log sind leer, wenn Safari fehlschlägt

Nginx-Version

nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

AKTUALISIEREN

Die Konsole auf meinem IPhone sagt, Protocol erroralso bin ich mir ziemlich sicher, dass es ein Fehler des IOS 11 ist

UPDATE 2

Ich habe diesen Beitrag gefunden

https://www.nginx.com/blog/http2-theory-and-practice-in-nginx-stable-13/

Es erklärt, dass, wenn Sie TLSv <1.2 unterstützen, Sie in einem PROTOCOL ERRORlanden und in meiner Serverkonfiguration nur TLSv1.2 belassen, dass die App wieder funktioniert, aber es ist fehlerhaft, einige Anfragen werden fehlschlagen ... das ist wieder unverständlich Chrome / Firefox funktioniert, aber in meiner mobilen Safari nicht

UPDATE 3 [28.02.2019]

Es gab einen Fehler auf unserer NGINX Config für die OPTIONS Verfahren zur Herstellung eines CORS anfordern verursacht duplizierten Content-Length und Content-Type - Header beantwortet werden, nachdem wir , dass die App lösen begannen feine Arbeiten in HTTP / 2, änderten wir auch den Status des die OPTIONS-Antwort von 200 bis 204

Leonel Franchelli
quelle
Haben Sie ungültige HTTP-Header? ZB vergessen, Anführungszeichen zu schließen oder mit Doppelpunkten? Safari ist besonders fehleranfällig.
Barry Pollard

Antworten:

0

Ich bin mir nicht sicher, ob dies immer noch ein Problem ist, und dies betrifft NGINX möglicherweise nicht auf die gleiche Weise wie Apache, aber Apache fügt automatisch UpgradeHeader hinzu , die Clients, die HTTP / 2 nicht unterstützen, dazu gezwungen haben (wie von dieses Bug-Ticket ) - Ich würde also noch einmal überprüfen, ob dies nicht auch auf diesem Server geschieht. Zu diesem Zeitpunkt sollten alle anderen HTTP / 2-Probleme in iOS 11-Upgrades behoben worden sein.

BEARBEITEN: Die Problemumgehung bestand darin, diese Header in Apache manuell zu löschen. Ich hoffe, dies hilft Ihnen dabei, eine Richtung für Nginx zu finden.

Logan B. Lehman
quelle
Der UpgradeHeader könnte auch der Schuldige in Nginx sein. Nach dem Entfernen mit proxy_hide_header Upgrade;h2 funktioniert es auch mit iOS.
Keeper
-3

Ich hatte ein ähnliches Problem: Ich verwende Apache unter Windows 2008 R2, h2das für alle virtuellen Hosts aktiviert ist, und mod_http2iOS 11 kommuniziert nicht ordnungsgemäß mit dem Server, was zu einem Protokollfehler führt. Das Update besteht darin, nur http2auf der Serverseite zu deaktivieren oder httpim Gegensatz zu zurückzusetzen https.

Vahid Amiri
quelle
2
Das ist keine Lösung. Das heißt, ein Downgrade durchzuführen und HTTP / 2 nicht zu verwenden
Rob
@ Rob Downgrade ist das Update.
Vahid Amiri