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 listen
alles 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 error
also 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 ERROR
landen 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