2 votes

Le serveur derrière l'équilibreur de charge indique le statut 200 mais le client indique que la connexion a échoué.

J'ai une installation AWS qui n'est pas fiable et j'essaie de comprendre pourquoi. Pour le contexte - le site est nouveau et vient d'être testé par notre équipe, mais il a des problèmes persistants pour certaines de nos personnes en fonction de leur appareil, principalement sur les iPhones à travers les navigateurs. Le problème est que ces membres de l'équipe sont à distance et que lorsque je regarde mes journaux, il semble que tout fonctionne et je suis également incapable de reproduire le bug localement.

La configuration est la suivante :

  • Un domaine Route 53 aliasé à l'Application Load Balancer

  • Un équilibreur de charge applicatif AWS (logs ci-dessous) ouvert aux connexions externes pour HTTP et HTTPS avec une redirection automatique vers HTTPS.

  • Deux (maintenant un seul - pour faciliter le débogage) EC2s exécutant une pile LAMP dans Apache seulement ouvert au groupe de sécurité de l'équilibreur (logs ci-dessous)

Le site équilibreur de charge log (extrait - juste la ligne de l'iPhone qui ne peut pas se connecter) :

h2 2019-02-15T14:35:51.824359Z app/MYAPP/aa921ed4d3be346d 67.247.62.19:55247 172.31.89.211:80 0.001 0.441 0.000 200 200 299 41462 "GET https://www.example.com:443/ HTTP/2.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:495989323513:targetgroup/MYAPPHTTPINTERNALFROMLOADTOEC2/29d1b899c1f7c0b0 "Root=1-5c66ce47-0d87c4f5e9227744bf3cc78e" "www.example.com" "arn:aws:acm:us-east-1:495989323513:certificate/466810d1-3797-4abf-ba26-0865cb14e5b6" 0 2019-02-15T14:35:51.267000Z "forward" "-" "-"

h2 2019-02-15T14:35:52.021618Z app/MYAPP/aa921ed4d3be346d 67.247.62.19:52933 172.31.89.211:80 0.001 0.001 0.000 200 200 208 336 "GET https://www.example.com:443/favicon.ico HTTP/2.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:495989323513:targetgroup/MYAPPHTTPINTERNALFROMLOADTOEC2/29d1b899c1f7c0b0 "Root=1-5c66ce48-b28a362cbdcf892c54bfc23a" "www.example.com" "arn:aws:acm:us-east-1:495989323513:certificate/466810d1-3797-4abf-ba26-0865cb14e5b6" 0 2019-02-15T14:35:52.019000Z "forward" "-" "-"

Le site apache log :

172.31.82.163 - - [15/Feb/2019:14:35:51 +0000] "GET / HTTP/1.1" 200 85507 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1"

172.31.82.163 - - [15/Feb/2019:14:35:52 +0000] "GET /favicon.ico HTTP/1.1" 200 - "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like MacOS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1

J'ai du mal ici car il semble que les connexions aient le statut 200.

Le guide pour la lecture du journal ELB est ici - Journal d'accès à AWS ELB

Le guide pour la lecture du journal d'Apache est ici -. Journal d'accès à Apache

Remarquez que le journal d'apache ne montre aucun taille de l'objet est renvoyé au client pour la favicon, mais c'est parce qu'elle n'existe pas encore pour ce site.

Le journal des erreurs d'Apache ne contient rien, pas plus que le journal des erreurs de l'application. Je m'y connecte sans problème, mais pas mes membres qui ont un iPhone (je ne suis même pas sûr que l'iPhone fasse la différence, ce pourrait être une simple coïncidence).

L'erreur est la suivante :

Error

Ma configuration d'Apache est juste celle par défaut httpd.conf avec le répertoire racine modifié pour servir mon site.

Le voici (uniquement avec les lignes que j'ai modifiées) :

DocumentRoot "/var/www/html/myapp/public/"
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

# Further relax access to the default document root:
<Directory "/var/www/html/myapp/public">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

Encore une fois, cela fonctionne pour moi et pour ce membre sur son ordinateur de bureau, mais pas sur son iPhone (et celui de certains autres membres).

Je cherche une aide supplémentaire pour le débogage, merci.

Je pense vraiment qu'il s'agit soit d'un équilibreur de charge, soit d'un problème de route 53, car lorsque cet iPhone se connecte directement à l'ec2 via son IP (lorsque je relâche temporairement les paramètres du groupe de sécurité), il charge bien la page...

Hmmm... Je pense que ça a à voir avec ça : https://stackoverflow.com/questions/47962233/unable-to-access-website-on-safari-ios

1voto

Slothworks Points 437

C'était ça : HTTPS ne fonctionne pas avec Safari

Ajoutez ce qui suit à votre httpd.conf pour corriger :

 <IfModule mod_http2.c>
    Protocols h2 http/1.1
    Header unset Upgrade
</IfModule>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X