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

Websites, die auf einer EC2 Instance ausgeführt werden, können aus mehreren Gründen nicht mehr erreichbar sein. Um dieses Problem zu beheben, stellen Sie sicher, dass die Konfigurationseinstellungen auf Ihrer EC2 Instance korrekt sind. Wenn Ihre Instance beispielsweise nicht korrekt bootet oder nicht über die richtigen DNS-Konfigurationen verfügt, können Sie keine Verbindung zu einer Website herstellen, die auf dieser Instance gehostet wird.

Verwenden Sie die Schritte in diesem Artikel, um die Konfigurationseinstellungen Ihrer EC2 Instance zu überprüfen und die Ursache für dieses Problem zu ermitteln.

Behebung

Hinweis: Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Verwenden Sie die serielle EC2-Konsole für Linux, um Nitro-basierte Instance-Typen zu beheben

Wenn Sie die serielle EC2-Konsole für Linux aktiviert haben, können Sie damit Probleme mit unterstützten Nitro-basierten Instance-Typen beheben. Sie können über die Amazon EC2-Konsole oder die AWS CLI auf die serielle Konsole zugreifen. Sie benötigen keine funktionierende Verbindung, um eine Verbindung zu Ihrer Instance herzustellen, wenn Sie die serielle EC2-Konsole verwenden.

Gehen Sie wie folgt vor, bevor Sie die serielle Konsole zur Fehlerbehebung verwenden:

  • Gewähren Sie Zugriff auf die serielle Konsole auf Kontoebene
  • Erstellen Sie Richtlinien für AWS Identity and Access Management (IAM), die Ihren IAM-Benutzern Zugriff gewähren
  • Stellen Sie sicher, dass Ihre Instance mindestens einen passwortbasierten Benutzer enthält

Prüfen Sie, ob die Instance läuft und beide Statusprüfungen bestanden hat

Stellen Sie sicher, dass die Instance in der Amazon-EC2-Konsole als ausgeführt aufgeführt ist. Wenn Ihre Instance nicht läuft oder Sie ein anderes Problem mit der Statusüberprüfung haben, folgen Sie den Schritten unter Warum ist meine EC2-Linux-Instance nicht erreichbar und besteht die Statusüberprüfung nicht?

Prüfen Sie, ob die Instance korrekt gestartet wird

Überprüfen Sie die Systemprotokolle der Instance auf Startfehler.

Überprüfen Sie die Sicherheitsgruppen- und Netzwerk-ACL-Konfiguration der Instance

Stellen Sie sicher, dass die Instance die richtige DNS-Konfiguration hat

Stellen Sie 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 Ihrer Website herstellen.

Um zu überprüfen, ob die Website lokal läuft, führen Sie diesen Befehl auf der EC2 Instance Hosting Website aus:

curl https://localhost

-oder-

curl http://localhost:443

1.Stellen Sie eine Remote-Verbindung zur Instanz über SSH her.

2.Überprüfen Sie den Status des Webservers.

  • Verwenden Sie für RHEL- oder CentOS-Systeme den Befehl systemctl status httpd, um den Status des Webservers zu überprüfen. Der Befehl gibt Informationen zurück, dass der Webserver inaktiv ist:
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
  • Für Debian- oder Ubuntu-Systeme verwenden Sie den Befehl systemctl status httpd, 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
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: inactive (dead)

3.Führen Sie diesen Befehl aus, um den Webserver neu zu starten:

  • Für REHL- oder CentOS-Systeme:
$ sudo systemctl restart httpd
  • Führen Sie für Debian- oder Ubuntu-Systeme diesen Befehl aus:
$ sudo systemctl restart apache2

4.Stellen Sie sicher, dass der Webserver jetzt läuft:

  • Führen Sie für REHL- oder CentOS-Systeme diesen Befehl aus:
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2020-11-19 14:40:15 UTC; 42s ago
  • Führen Sie für Debian- oder Ubuntu-Systeme diesen Befehl aus:
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running)

**Hinweis:**Führen Sie für ältere Linux-Systeme, auf denen SystemV ausgeführt wird, diesen Befehl aus, um den Webserverstatus zu überprüfen.
Für Debian- oder Ubuntu-Systeme müssen Sie httpd durch apache2 ersetzen:

$ sudo service httpd status
httpd is stopped

Um einen gestoppten Webserver auf SystemV neu zu starten, führen Sie diesen Befehl aus:

$ sudo service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]

5.Führen Sie diesen Befehl aus, um zu bestätigen, dass der Webserver auf Port 80 oder 443 auf eingehende Verbindungsanfragen von Benutzern wartet:

  • Führen Sie für REHL- oder CentOS-Systeme diesen Befehl aus:
$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd
  • Führen Sie für Debian- oder Ubuntu-Systeme diesen Befehl aus:
$ sudo netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2741/apache2

6.Überprüfen Sie den Status von Firewalls auf Betriebssystemebene. Wenn Sie eine aktive Firewall finden, stellen Sie sicher, dass sie Anfragen an den Ports 80 und 443 zulässt.

**Hinweis:**Wenn mehrere Interfaces laufen, stellen Sie sicher, dass der Webserver alle IPs überwacht, indem Sie diesen Befehl ausführen:

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

Dies sind Beispiele für erfolgreiche Ergebnisse:

Listen *:80

-oder-

Listen *:443

Amazon Linux, CentOS und RHEL

1.Führen Sie diesen Befehl aus, um zu überprüfen, ob die iptables-Regeln eingehende Anfragen an den Ports 80 und 443 blockieren:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

2.Führen Sie diesen Befehl aus, damit Port 80 eingehende HTTP-Verbindungsanforderungen annehmen kann:

$ sudo iptables -A INPUT -p tcp --dport 80 --syn -m conntrack --ctstate NEW -j ACCEPT

3.Führen Sie diesen Befehl aus, damit Port 443 eingehende HTTPS-Verbindungsanforderungen annehmen kann:

$ sudo iptables -A INPUT -p tcp --dport 443 --syn -m conntrack --ctstate NEW -j ACCEPT

Amazon Linux 2023, Amazon Linux 2 und RHEL 7 und höher

1.Führen Sie diesen Befehl aus, um zu überprüfen, ob firewalld läuft:

$ sudo firewall-cmd --state
running

2.Wenn firewalld läuft, führen Sie diese Befehle aus, um es so zu konfigurieren, dass Verbindungen an den Ports 80 und 443 zugelassen werden. Der letzte Befehl in diesem Beispiel lädt den Dienst neu, sodass die neuen Regeln wirksam werden:

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

Debian- und Ubuntu-Server

1.Führen Sie diesen Befehl aus, um nach einer UFW-Firewall zu suchen:

$ sudo ufw status verbose
Status: active

2.Wenn UFW läuft, verwenden Sie diesen Befehl, um eingehende Verbindungsanforderungen auf den Ports 80 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üfen Sie die Fehlerprotokolle Ihres Webserver-Zugriffs auf Probleme. Webserver-Logs befinden sich unter /var/log. Dieser Ort kann sich je nach Serverkonfiguration ändern. Dies sind die Standardspeicherorte für Webserver-Logs:

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

Ähnliche Informationen

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

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren