Warum kann ich keine Verbindung zu einer Website herstellen, die auf meiner EC2 Instance gehostet wird?
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.
- Wenn Sie einen Kernel-Panic-Fehler sehen, finden Sie weitere Informationen unter Warum sehe ich einen „Kernel-Panic“ -Fehler, nachdem ich den Kernel aktualisiert oder meine EC2-Linux-Instance neu gestartet habe?
- Informationen zu anderen Betriebssystemproblemen finden Sie unter Wie behebe ich eine EC2-Linux-Instance, welche die Instance-Statusprüfung aufgrund von Betriebssystemproblemen nicht bestanden hat?
Überprüfen Sie die Sicherheitsgruppen- und Netzwerk-ACL-Konfiguration der Instance
- Stellen Sie sicher, dass die der Instance zugeordnete Sicherheitsgruppe und die Netzwerk-ACL den Verkehr auf den Ports 80 und 443 zulassen.
- Stellen Sie sicher, dass die Routing-Tabelle im Subnetz der Instance eine Standardroute zu einem Internet-Gateway hat.
Stellen Sie sicher, dass die Instance die richtige DNS-Konfiguration hat
- Wenn Ihre Website den Route 53-DNS-Dienst verwendet, überprüfen Sie, ob Sie die DNS-Einträge korrekt konfiguriert haben.
- Stellen Sie sicher, dass der Instance eine Elastic-IP-Adresse zugewiesen ist. Wenn Sie Ihre Instance beenden und starten, ist die Elastic-IP-Adresse immer noch mit der Instance verknüpft.
- Stellen Sie sicher, dass Sie die öffentliche IP-Adresse oder Elastic-IP-Adresse einem A-Record zuordnen.
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?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 8 Monaten