Les appareils iOS 11 ne parviennent pas à accéder au site nginx HTTPS sécurisé avec LetsEncrypt (erreur de protocole)

Depuis quelques jours, les utilisateurs qui viennent de mettre à jour vers iOS 11 ne peuvent plus accéder à mon site. Il est hébergé via un proxy inverse nginx qui utilise LetsEncrypt pour fournir le protocole SSL.

L’expérience client est que si vous cliquez sur un lien, la fenêtre safari disparaît généralement ou affiche une erreur générique.

À l’aide du débogueur, il y a une erreur: [Erreur [Échec du chargement de la ressource: l’opération n’a pas pu être effectuée. Erreur de protocole

Cela se produit uniquement avec les appareils iOS depuis la mise à jour vers iOS 11.

Mon serveur s’exécute sur DigitalOcean avec l’image docker jwilder / nginx-proxy .

Ok, j’ai en fait trouvé que le problème était lié à une implémentation incorrecte de HTTP2 dans iOS11.

Cet article a mis en lumière la situation: http://www.essential.exchange/2017/09/18/ios-11-about-to-release-things-to-be-aware-of/

L’image de docker jwilder / nginx-proxy utilise http2 par défaut et, pour autant que je sache, vous ne pouvez pas non plus la modifier.

Non, pour résoudre le problème, supprimez le mot clé http2 dans votre configuration de serveur pour le moment.

Ce:

server { listen xxxx:443 ssl http2; server_name xxxx; [...] } 

Devient:

 server { listen xxxx:443 ssl; server_name xxxx; [...] } 

Si vous utilisez jwilder / nginx-proxy, vous devrez également changer /app/nginx.tmpl , sinon le fichier de configuration sera réécrit à un moment donné.

J’espère que cette réponse aidera certaines personnes aux sockets avec le même problème. Si vous trouvez une autre solution pour résoudre ce problème, veuillez l’append ci-dessous. Je n’ai pas eu trop de temps pour chercher des solutions car il m’a fallu une éternité pour trouver celle-ci.