Warum kann ich keine Verbindung zu einer Website herstellen, die auf meiner EC2 Instance gehostet wird?

Lesedauer: 8 Minute
0

Ich kann keine Verbindung zu einer öffentlichen Website herstellen, die auf meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance gehostet wird.

Kurzbeschreibung

Um den Fehler einer nicht erreichbaren Website zu beheben, überprüfe, ob die Konfigurationseinstellungen auf deiner EC2-Instance korrekt sind. Wenn deine Instance beispielsweise nicht über die richtigen DNS-Konfigurationen verfügt, kannst du zu keiner Website, die auf dieser Instance gehostet wird, eine Verbindung herstellen.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Verwende SSH oder SSM Session Manager, um eine Verbindung zur Instance herzustellen. Wenn keine der Methoden verfügbar ist, verwende die serielle EC2-Konsole, um eine Verbindung zu Instances herzustellen, die auf dem Nitro-System erstellt wurden.

Prüfen, ob die Instance ausgeführt wird und beide Statusprüfungen bestanden hat

Stelle sicher, dass die Instance in der Amazon-EC2-Konsole ausgeführt wird. Wenn du ein Problem mit der Statusprüfung hast, befolge die Schritte unter Warum ist meine EC2-Linux-Instance nicht erreichbar und besteht die Statusprüfungen nicht? Prüfe, ob die Instance korrekt gestartet wird. Weitere Informationen findest du unter Ausgabe der Instance-Konsole oder Screenshot einer nicht erreichbaren Instance aufnehmen.

Überprüfe die Systemprotokolle der Instance auf Startfehler.

Verwende die folgenden Methoden, um nach Startfehlern zu suchen:

Überprüfung der Sicherheitsgruppen- und Netzwerk-ACL-Konfiguration der Instance

Verwende die folgenden Methoden, um die Konfiguration der Instance zu überprüfen:

Sicherstellen, dass die Instance die richtige DNS-Konfiguration hat

Verwende die folgenden Methoden, um die Konfiguration der Instance zu überprüfen:

Stelle sicher, dass der Webserver läuft und dass keine Firewalls auf Betriebssystemebene den Zugriff auf Ports blockieren

Netzwerkports sind die Kommunikationsendpunkte, an die verschiedene Dienste Anfragen senden. Diese Anfragen beinhalten Verbindungsanfragen der Benutzer zur Website. Webserver warten auf Port 80 auf HTTP-Verkehr und verwenden Port 443 für mit TLS/SSL verschlüsselten Verkehr. Wenn der Webserver nicht läuft oder Firewalls diese Ports blockieren, können Benutzer keine Verbindung zu deiner Website herstellen. Gehe wir folgt vor:

  1. Um zu überprüfen, ob die Website lokal läuft, führe den folgenden Befehl auf der EC2-Instance Hosting-Website aus:

    curl https://localhost

    -oder-

    curl http://localhost:443

    Hinweis: Wenn du bei der Verwendung von curl auf Probleme stößt, überprüfe, ob es Probleme mit dem Webhosting-Server der Instance gibt. Überprüfe auch die Anwendungskonfiguration in der Instance.
    Stelle über SSH, SSM Session Manager oder die serielle EC2-Konsole eine Verbindung zur Instance her.

  2. Überprüfe den Servicestatus des Webservers.
    Führe für RHEL-, CentOS-, Fedora- und Amazon Linux-Systeme den Befehl systemctl status httpd aus, um den Status des Webservers zu überprüfen. Der Befehl gibt Informationen zurück, dass der Webserver inaktiv ist:

    $ sudo systemctl status httpd.service
    
    The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset:
    disabled)
    Active: inactive (dead)

    Verwende bei Debian- oder Ubuntu-Systemen den Befehl systemctl status apache2, um den Status des Webservers zu überprüfen. Der Webserver muss Port 80 oder 443 überwachen. Der Befehl gibt Informationen zurück, dass der Webserver inaktiv ist:

    $ sudo systemctl status apache2.service
    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)
  3. Führe die folgenden Befehle aus, um den Webserver zu starten und den Service so zu aktivieren, dass er beim Booten gestartet wird:
    Bei RHEL-, CentOS-, Fedora- und Amazon Linux-Systemen:

    $ sudo systemctl start httpd; sudo systemctl enable httpd

    Bei Debian- oder Ubuntu-Systemen:

    $ sudo systemctl start apache2; sudo systemctl enable apache2
  4. Stelle sicher, dass der Webserver-Service ausgeführt wird und aktiviert ist:
    Führe bei RHEL-, CentOS-, Fedora- und Amazon Linux-Systemen den folgenden Befehl aus:

    $ sudo systemctl status httpd.service
    The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service;
    enabled; vendor preset: disabled)Active: active (running)

    Führe bei Debian- oder Ubuntu-Systemen den folgenden Befehl aus:

    $ sudo systemctl status apache2.service
    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)Active: active (running)

    Hinweis: Führe bei Linux-Systemen, auf denen SystemV ausgeführt wird, den folgenden Befehl aus, um den Status des Webservers zu überprüfen.
    Bei Debian- oder Ubuntu-Systemen musst du httpd durch apache2 ersetzen:

    $ sudo service httpd statushttpd is stopped

    Führe den folgenden Befehl aus, um einen angehaltenen Webserver-Service auf SystemV zu starten:

    $ sudo service httpd start
    Starting httpd:                                            [  OK  ]
  5. Führe den folgenden Befehl aus, um dich zu vergewissern, dass der Webserver auf Port 80 oder 443 auf eingehende Verbindungsanforderungen von Benutzern lauscht:

    $ sudo netstat -tulpn | grep -iP 'httpd|apache2'
    tcp        0      0 :::80               :::*                     LISTEN
          2961/httpd

    Hinweis: Wenn mehrere Schnittstellen laufen, stelle sicher, dass der Webserver auf allen IP-Adressen lauscht, und führe dann den folgenden Befehl aus:

    cat /etc/httpd/conf/httpd.conf  | grep Listen

    Im Folgenden findest du Beispielausgaben:

    Listen *:80

    -oder-

    Listen *:443
  6. Überprüfe den Status von Firewalls auf Betriebssystemebene. Wenn du eine aktive Firewall findest, stelle sicher, dass sie Anforderungen an den Ports 80 und 443 zulässt.
    (Optional) Führe den folgenden Befehl aus, um zu überprüfen, ob die iptables-Regeln eingehende Anforderungen an den Ports 80 und 443 blockieren:

    $ sudo iptables -vnL
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
       35 10863 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

    Die Ausgabe des vorherigen IPTables-Befehls zeigt, dass nur ICMP, localhost und Port 22 / TCP (SSH) zulässig sind. Dies bedeutet, dass eingehende Verbindungen zu Port 80 / TCP und 443/TCP blockiert oder abgelehnt werden.
    Führe den folgenden Befehl aus, damit Port 80 und 443 eingehende HTTP- und HTTPS-Verbindungsanforderungen akzeptieren können:

    $ iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

    Die folgende Ausgabe zeigt, dass die Multiport-Regel den Webserver-Service-Ports 80/TCP und 443/TCP hinzugefügt wird.

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
      486  104K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Für Amazon Linux 2023, Amazon Linux 2 und RHEL 7 und höher

Führe den folgenden Befehl aus, um zu überprüfen, ob der firewalld-Service ausgeführt wird:

$ sudo firewall-cmd --staterunning

Wenn der firewalld-Service ausgeführt wird, führe die folgenden Befehle aus, um Verbindungen auf den Ports 80/TCP und 443/TCP zuzulassen. Der letzte Befehl im Beispiel lädt den Service neu, um die neu hinzugefügten Regeln in Kraft zu setzen:

$ sudo firewall-cmd --add-service=http --permanent
success
$ sudo firewall-cmd --add-service=https --permanent
success
$ sudo firewall-cmd --reload
success

Für Debian- und Ubuntu-Server

Gehe wir folgt vor:

  1. Führe den folgenden Befehl aus, um nach einer Uncomplicated Firewall (UFW) zu suchen:

    $ sudo ufw status verbose
    Status:  active
  2. Wenn eine UFW ausgeführt wird, verwende den folgenden Befehl, um eingehende Verbindungsanforderungen auf den Ports 80/TCP und Port 443/ zuzulassen:

    $ sudo ufw allow in 80/tcp
    Rule added
    Rule added (v6)
    $ sudo ufw allow 443/tcp
    Rule added
    Rule added (v6)

Überprüfe die Protokolle mit Webserver-Zugriffsfehlern auf Probleme. Webserver-Protokolle befinden sich unter /var/log. Im Folgenden sind die Standardspeicherorte für Webserver-Protokolle aufgeführt:

  • Amazon Linux und RHEL: /var/log/httpd
  • Debian und Ubuntu: /var/log/apache2

Hinweis: Der Speicherort des Webserver-Protokolls hängt von deiner Serverkonfiguration ab.

Ähnliche Informationen

Wie behebe ich langsame Verbindungen zu einer Website, die auf meiner EC2 Instance gehostet wird?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten