Skip to content

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

Lesedauer: 7 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 Probleme mit nicht erreichbaren Websites zu lösen, stelle sicher, dass du die Website-Konfiguration der EC2-Instance korrekt konfiguriert hast. Falsche Webservereinstellungen auf der Instance blockieren den Zugriff auf alle darauf gehosteten Websites.

Lösung

Sicherstellen, dass die Instance ausgeführt wird und beide Statusüberprüfungen besteht

Überprüfe die Amazon EC2-Konsole, um sicherzustellen, dass die Instance ausgeführt wird. Informationen zur Behebung von Problemen mit der Statusüberprüfung findest du unter Warum ist meine EC2-Linux-Instance nicht erreichbar und besteht ihre Statusprüfungen nicht?

Verwende außerdem die Konsolenausgabe der Instance und einen Screenshot der Instance, um zu überprüfen, ob die Instance korrekt bootet.

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

Überprüfe die folgenden Instance-Konfigurationen:

Sicherstellen, dass die Website die richtige DNS-Konfiguration hat

Überprüfe die folgenden DNS-Konfigurationen für die Website:

Sicherstellen, dass der Webserver ausgeführt wird und dass keine Betriebssystem-Firewalls den Zugriff auf Ports blockieren

Gehe wie folgt vor, um die Netzwerkportkonfiguration und den Webserver zu überprüfen:

  1. Verwende SSH oder Session Manager, eine Funktion von AWS Systems Manager, um eine Verbindung zur Instance herzustellen. Wenn du SSH oder Session Manager nicht verwenden kannst, um eine Verbindung zu Instances herzustellen, die auf dem AWS Nitro System erstellt wurden, verwende die serielle EC2-Konsole.

  2. Um zu überprüfen, ob die Website lokal ausgeführt wird, führe den folgenden Befehl auf der EC2-Instance-Host-Website aus:

    curl https://localhost

    -oder-

    curl http://localhost:443

    Hinweis: Wenn du bei der Verwendung von curl auf Probleme stößt, suche nach Problemen mit dem Webserver und der Anwendungskonfiguration der Instance.

  3. Um den Service-Status des Webservers zu überprüfen, führe je nach Betriebssystem, das du ausführst, den folgenden Befehl aus.
    Red Hat Enterprise Linux (RHEL), CentOS, Fedora und Amazon Linux:

    sudo systemctl status httpd.service

    Beispielausgabe:

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

    Debian und Ubuntu:

    sudo systemctl status apache2.service

    Beispielausgabe:

    The Apache HTTP Server
    Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)

    Prüfe in der Befehlsausgabe, ob der Status inactive (dead) (inaktiv (tot)) ist.
    Wenn auf dem Linux-System System V ausgeführt wird, führe den folgenden Befehl aus, um den Webserverstatus zu überprüfen:

    sudo service httpd status

    Hinweis: Wenn du Debian oder Ubuntu ausführst, ersetze httpd durch apache2.
    Beispielausgabe:

    httpd is stopped
  4. Um den Webserver zu starten und den Service so einzustellen, dass er beim Booten gestartet wird, führe je nach Betriebssystem die folgenden Befehle aus:
    RHEL, CentOS, Fedora und Amazon Linux:

    sudo systemctl start httpd; sudo systemctl enable httpd

    Debian oder Ubuntu:

    sudo systemctl start apache2; sudo systemctl enable apache2
  5. Um zu überprüfen, ob der Webserver-Service ausgeführt wird und aktiviert ist, führe je nach Betriebssystem die folgenden Befehle aus:
    RHEL, CentOS, Fedora und Amazon Linux:

    sudo systemctl status httpd.service

    Beispielausgabe:

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

    Debian oder Ubuntu:

    sudo systemctl status apache2.service

    Beispielausgabe:

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

    Führe den folgenden Befehl aus, um einen gestoppten Webserverservice für Systeme zu starten, die auf System V ausgeführt werden:

    sudo service httpd start

    Beispielausgabe:

    Starting httpd:                                            [  OK  ]
  6. Führe den folgenden Befehl aus, um zu bestätigen, dass der Webserver auf eingehende Benutzerverbindungsanforderungen wartet:

    sudo netstat -tulpn|grep -i :80
    tcp6       0      0 :::80                   :::*                    LISTEN      11993/httpd

    Hinweis: Führe den vorherigen Befehl zweimal aus. Ersetze beim zweiten Mal 80 durch 443. Webserver lauschen auf Port 80 auf HTTP-Datenverkehr und auf Port 443 auf mit TLS/SSL-verschlüsselten Datenverkehr.
    Wenn du mehrere Schnittstellen ausführst, führe den folgenden Befehl aus, um zu bestätigen, dass der Webserver auf allen IP-Adressen lauscht:

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

    Beispielausgaben:

    Listen *:80
    Listen *:443
  7. Wenn du eine Betriebssystem-Firewall verwendest, stelle sicher, dass sie Anforderungen an den Ports 80 und 443 zulässt.

  8. (Optional) Führe den folgenden Befehl aus, um zu überprüfen, ob die iptables-Regeln Anforderungen des eingehenden Datenverkehrs an den Ports 80 und 443 zulassen:

    sudo iptables -vnL

    Beispielausgabe:

    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

    In der vorherigen Beispielausgabe lassen die Regeln nur Internet Control Message Protocol (ICMP), localhost und Port 22/TCP (SSH) zu. Die Regeln blockieren eingehende Datenverkehrs-Verbindungen zum TCP-Port 80 oder 443.

  9. Führe den folgenden Befehl aus, um die iptables-Regeln so zu konfigurieren, dass Port 80 und 443 HTTP- und HTTPS-Verbindungsanforderungen für eingehenden Datenverkehr akzeptieren können:

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

    Beispielausgabe:

    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

Überprüfe die Konfigurationen für AL2023, AL2 und RHEL 7 und höher

Führe für Amazon Linux 2023 (AL2023)-, Amazon Linux 2 (AL2)- und RHEL-Instances den folgenden Befehl aus, um zu überprüfen, ob der firewalld-Service ausgeführt wird:

sudo firewall-cmd --state

Beispielausgabe:

running

Wenn der firewalld-Service ausgeführt wird, führe die folgenden Befehle aus, um Verbindungen an den TCP-Ports 80 und 443 zuzulassen:

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

Hinweis: Wenn du zuvor Regeln hinzugefügt hast, lädt der Befehl reload den Service neu und die Regeln werden wirksam.

Stelle für jeden Befehl sicher, dass die Ausgabe dem folgenden Beispiel ähnelt:

success

Überprüfen der Konfigurationen für Debian- und Ubuntu-Server

Führe die folgenden Schritte aus:

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

    sudo ufw status verbose

    Beispielausgabe:

    Status:  active
  2. Wenn du eine UFW ausführst, verwende den folgenden Befehl, um Verbindungsanforderungen für eingehenden Datenverkehr an den erforderlichen TCP-Ports zuzulassen:
    TCP-Port 80:

    sudo ufw allow in 80/tcp

    TCP-Port 443:

    sudo ufw allow 443/tcp
  3. Stelle für jeden Befehl sicher, dass die Ausgabe dem folgenden Beispiel ähnelt:

    Rule added
    Rule added (v6)

Um weitere Probleme zu beheben, überprüfe die Zugriffsfehlerprotokolle des Webservers unter /var/log auf Probleme. Verwende die folgenden Standard-Webserver-Protokollspeicherorte:

  • Verwende /var/log/httpd für Amazon Linux und RHEL.
  • Verwende /var/log/apache2 für Debian und Ubuntu.

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 OFFICIALAktualisiert vor 2 Monaten