One place for hosting & domains

      Servers

      Troubleshooting Web Servers, Databases, and Other Services


      Updated by Linode Written by Linode

      This guide presents troubleshooting strategies for when you can’t connect to your web server, database, or other services running on your Linode. This guide assumes that you have access to SSH. If you can’t log in with SSH, review Troubleshooting SSH and then return to this guide.

      Where to go for help outside this guide

      This guide explains how to use different troubleshooting commands on your Linode. These commands can produce diagnostic information and logs that may expose the root of your connection issues. For some specific examples of diagnostic information, this guide also explains the corresponding cause of the issue and presents solutions for it.

      If the information and logs you gather do not match a solution outlined here, consider searching the Linode Community Site for posts that match your system’s symptoms. Or, post a new question in the Community Site and include your commands’ output.

      Linode is not responsible for the configuration or installation of software on your Linode. Refer to Linode’s Scope of Support for a description of which issues Linode Support can help with.

      General Troubleshooting Strategies

      This section highlights troubleshooting strategies that apply to every service.

      Check if the Service is Running

      The service may not be running. Check the status of the service:

      Distribution Command                                                               
      systemd systems (Arch, Ubuntu 16.04+, Debian 8+, CentOS 7+, etc) sudo systemctl status <service name> -l
      sysvinit systems (CentOS 6, Ubuntu 14.04, Debian 7, etc) sudo service <service name> status

      Restart the Service

      If the service isn’t running, try restarting it:

      Distribution Command
      systemd systems sudo systemctl restart <service name>
      sysVinit systems sudo service <service name> restart

      Enable the Service

      If your system was recently rebooted, and the service didn’t start automatically at boot, then it may not be enabled. Enable the service to prevent this from happening in the future:

      Distribution Command
      systemd systems sudo systemctl enable <service name>
      sysVinit systems sudo chkconfig <service name> on

      Check your Service’s Bound IP Address and Ports

      Your service may be listening on an unexpected port, or it may not be bound to your public IP address (or whatever address is desirable). To view which address and ports a service is bound on, run the ss command with these options:

      sudo ss -atpu
      

      Review the application’s documentation for help determining the address and port your service should bind to.

      Note

      One notable example is if a service is only bound to a public IPv4 address and not to an IPv6 address. If a user connects to your Linode over IPv6, they will not be able to access the service.

      Analyze Service Logs

      If your service doesn’t start normally, review your system logs for the service. Your system logs may be in the following locations:

      Distribution System Logs
      systemd systems Run journalctl
      Ubuntu 14.04, Debian 7 /var/log/syslog
      CentOS 6 /var/log/messages

      Your service’s log location will vary by the application, but they are often stored in /var/log. The less command is a useful tool for browsing through your logs.

      Try pasting your log messages into a search engine or searching for your messages in the Linode Community Site to see if anyone else has run into similar issues. If you don’t find any results, you can try asking about your issues in a new post on the Linode Community Site. If it becomes difficult to find a solution, you may need to rebuild your Linode.

      Review Firewall Rules

      If your service is running but your connections still fail, your firewall (which is likely implemented by the iptables software) may be blocking the connections. To review your current firewall ruleset, run:

      sudo iptables -L # displays IPv4 rules
      sudo ip6tables -L # displays IPv6 rules
      

      Note

      Your deployment may be running FirewallD or UFW, which are frontends used to more easily manage your iptables rules. Run these commands to find out if you are running either package:

      sudo ufw status
      sudo firewall-cmd --state
      

      Review How to Configure a Firewall with UFW and Introduction to FirewallD on CentOS to learn how to manage and inspect your firewall rules with those packages.

      Firewall rulesets can vary widely. Review the Control Network Traffic with iptables guide to analyze your rules and determine if they are blocking connections. For example, a rule which allows incoming HTTP traffic could look like this:

        
      -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
      
      

      Disable Firewall Rules

      In addition to analyzing your firewall ruleset, you can also temporarily disable your firewall to test if it is interfering with your connections. Leaving your firewall disabled increases your security risk, so we recommend re-enabling it afterward with a modified ruleset that will accept your connections. Review Control Network Traffic with iptables for help with this subject.

      1. Create a temporary backup of your current iptables:

        sudo iptables-save > ~/iptables.txt
        
      2. Set the INPUT, FORWARD and OUTPUT packet policies as ACCEPT:

        sudo iptables -P INPUT ACCEPT
        sudo iptables -P FORWARD ACCEPT
        sudo iptables -P OUTPUT ACCEPT
        
      3. Flush the nat table that is consulted when a packet that creates a new connection is encountered:

        sudo iptables -t nat -F
        
      4. Flush the mangle table that is used for specialized packet alteration:

        sudo iptables -t mangle -F
        
      5. Flush all the chains in the table:

        sudo iptables -F
        
      6. Delete every non-built-in chain in the table:

        sudo iptables -X
        
      7. Repeat these steps with the ip6tables command to flush your IPv6 rules. Be sure to assign a different name to the IPv6 rules file (e.g. ~/ip6tables.txt).

      Troubleshoot Web Servers

      If your web server is not running or if connections are timing out, review the general troubleshooting strategies.

      Note

      If your web server is responding with an error code, your troubleshooting will vary by what code is returned. For more detailed information about each request that’s failing, read your web server’s logs. Here are some commands that can help you find your web server’s logs:

      • Apache:

        grep ErrorLog -r /etc/apache2  # On Ubuntu, Debian
        grep ErrorLog -r /etc/httpd    # On CentOS, Fedora, RHEL
        
      • NGINX:

        grep error_log -r /etc/nginx
        

      Frequent Error Codes

      • HTTP 401 Unauthorized, HTTP 403 Forbidden

        The requesting user did not have sufficient permission or access to the requested URL. Review your web server authorization and access control configuration:

      • HTTP 404 Not Found

        The URL that a user requested could not be found by the web server. Review your web server configuration and make sure your website files are stored in the right location on your filesystem:

      • HTTP 500, 502, 503, 504

        The web server requested a resource from a process it depends on, but the process did not respond as expected. For example, if a database query needs to be performed for a web request, but the database isn’t running, then a 50X code will be returned. To troubleshoot these issues, investigate the service that the web server depends on.

      Troubleshoot Databases

      Is your Disk Full?

      One common reason that a database may not start is if your disk is full. To check how much disk space you are using, run:

      df -h
      

      Note

      This reported disk usage is not the same as the reported storage usage in the Linode Manager. The storage usage in the Linode Manager refers to how much of the the disk space you pay for is allocated to your Linode’s disks. The output of df -h shows how full those disks are.

      You have several options for resolving disk space issues:

      • Free up space on your disk by locating and removing files you don’t need, using a tool like ncdu.

      • If you have any unallocated space on your Linode (storage that you pay for already but which isn’t assigned to your disk), resize your disk to take advantage of the space.

      • Upgrade your Linode to a higher-tier resource plan and then resize your disk to use the newly available space. If your Linode has a pending free upgrade for your storage space, you can choose to take this free upgrade to solve the issue.

      Database Performance Troubleshooting

      If your database is running but returning slowly, research how to optimize the database software for the resources your Linode has. If you run MySQL or MariaDB, read How to Optimize MySQL Performance Using MySQLTuner.

      Find answers, ask questions, and help others.

      This guide is published under a CC BY-ND 4.0 license.



      Source link

      Ersteinrichtung des Servers mit Ubuntu 18.04


      Einführung

      Wenn Sie erstmals einen neuen Ubuntu 18.04 Server einrichten, sollten Sie in der Anfangsphase einige dieser Konfigurationsschritte im Rahmen der Grundkonfiguration durchführen. Dadurch wird die Sicherheit und Nutzbarkeit Ihres Servers erhöht und Sie verfügen über eine solide Basis für weitere Aktionen.

      Bemerkung: Der nachfolgende Leitfaden illustriert, wie die von uns vorgegebenen Schritte für neue Ubuntu 18.04 Server manuell durchgeführt werden. Die manuelle Durchführung dieses Durchgangs kann von Nutzen sein, um grundlegende Systemadministrationskenntnisse zu erlernen, und als Übungsaufgabe, um die Aktivitäten, die auf Ihrem Server vorgenommen werden, vollständig zu verstehen. Wenn Sie eine schnellere Inbetriebnahme wollen, können Sie als Alternative unser initiales Server-Setup-Script ausführen, das diese Schritte automatisiert.

      Schritt 1 — Als root anmelden

      Um sich bei Ihrem Server anzumelden, müssen Sie die öffentliche IP-Adresse Ihres Servers kennen. Sie brauchen auch das Passwort, oder wenn Sie einen SSH-Key für Authentifizierung installiert haben, den privaten Schlüssel für das root-Nutzerkonto. Wenn Sie sich noch nicht bei Ihrem Server angemeldet haben, können Sie unserer Anleitung folgen, wie Sie sich mit SSH an Ihr Droplet anbinden, die diesen Prozess detailliert beschreibt.

      Wenn Sie noch nicht mit Ihrem Server verbunden sind, dann melden Sie sich mithilfe des nachfolgenden Befehls (ersetzen Sie den hervorgehobenen Teil des Befehls mit der öffentlichen IP-Adresse Ihres Servers) als root-Nutzer an.

      Akzeptieren Sie die Warnung über die Authentizität des Hosts, wenn sie erscheint. Wenn Sie Passwort-Authentifizierung benutzen, geben Sie Ihr root-Passwort zur Anmeldung an. Wenn Sie einen Passwort-geschützten SSH-Schlüssel benutzen, werden Sie eventuell dazu aufgefordert, das Passwort bei der ersten Nutzung des Schlüssels in jeder Sitzung einzugeben. Wenn Sie sich das erste Mal mit einem Password am Server anmelden, können Sie auch dazu aufgefordert werden, das root-Password einzugeben.

      Über Root

      Der root-Nutzer ist der administrative Nutzer in einem Linux-Umfeld mit umfassenden Rechten. Aufgrund der erhöhten Zugriffsberechtigung des root-Kontos, wird Ihnen von dessen regelmäßiger Nutzung abgeraten. Dies ist darauf zurückzuführen, dass ein Teil der dem root-Konto inhärenten Macht die Fähigkeit ist, äußerst zerstörende Änderungen, selbst nur durch Zufall, vorzunehmen.

      Der nächste Schritt ist das Einrichten eines alternativen Nutzerkontos with einem reduzierten Einflussbereich für die tägliche Arbeit. Wir werden Ihnen zeigen, wie Sie zusätzliche Rechte während der erforderlichen Zeiträume erhalten können.

      Schritt 2 — Erstellen eines neuen Nutzers

      Nachdem Sie sich als root angemeldet haben, sind wir bereit, das neue Nutzerkonto hinzuzufügen, bei dem wir uns in Zukunft anmelden werden.

      Dieses Beispiel erstellt einen neuen Nutzer namens Sammy, aber Sie sollten ihn ersetzen durch einen Nutzernamen, den Sie bevorzugen:

      Ihnen werden einige Fragen gestellt, beginnend mit dem Konto-Passwort.

      Geben Sie ein starkes Passwort ein und füllen Sie zusätzliche Informationen nach Wahl ein. Dies ist nicht zwingend, und Sie können einfach die ‚Eingabe‘-Taste bei jedem Feld, das Sie überspringen wollen, drücken.

      Schritt 3 — Vergabe von administrativen Rechten

      Jetzt haben wir ein neues Nutzerkonto mit normalen Kontozugriffsrechten. Manchmal müssen wir jedoch administrative Aufgaben ausführen.

      Um sich nicht als normaler Nutzer abmelden und sich wieder als root-Nutzer anmelden zu müssen, können wir sogenannte „Superuser“ oder root-Rechte für unser normales Konto einrichten. Dies erlaubt unseren normalen Nutzern, Befehle mit administrativen Rechten auszuführen, indem sie das Wort ‚sudo‘ vor jeden Befehl setzen.

      Um unserem neuen Nutzer diese Rechte zuzuweisen, müssen wir den neuen Nutzer der sudo-Gruppe zuordnen. Bei Ubuntu 18.04 sind Nutzer der sudo-Gruppe standardmäßig berechtigt, den ‚sudo‘-Befehl anzuwenden.

      Führen Sie als root diesen Befehl aus, um Ihren neuen Nutzer der sudo-Gruppe zuzuordnen (ersetzen Sie das hervorgehobene Wort mit Ihrem neuen Nutzer):

      Wenn Sie jetzt als normaler Nutzer angemeldet sind, können Sie ‚sudo‘ Befehlen vorstellen, um Aufgaben mit Superuser-Rechten auszuführen.

      Schritt 4 — Eine standardmäßige Firewall installieren

      Ubuntu 18.04 Server können die UFW-Firewall nutzen, um sicherzustellen, dass nur Verbindungen mit bestimmten Dienstleistungen erlaubt sind. Wir können mit dieser Applikation sehr einfach eine standardmäßige Firewall installieren.

      Bemerkung: Wenn Ihre Server mit DigitalOcean laufen, können Sie wahlweise auch DigitalOcean Cloud Firewalls anstatt der UFW-Firewall nutzen. Wir empfehlen jeweils nur eine Firewall zu nutzen, um einander widersprechende Regeln, die schwierig zu debuggen sind, zu vermeiden.

      Unterschiedliche Applikationen können nach Installierung ihre Profile bei UFW registrieren. Diese Profile erlauben UFW diese Applikationen namentlich zu managen. OpenSSH, der Service, mit dem wir jetzt an unseren Server anbinden können, hat ein Profil bei UFW registriert.

      Dies wird angezeigt, wenn Sie folgendes eingeben:

      Output

      Available applications: OpenSSH

      Wir müssen sicherstellen, dass die Firewall SSH-Verbindungen erlaubt, damit wir uns das nächste Mal wieder anmelden können. Wir können diese Verbindungen erlauben mit Eingabe von:

      Anschließend können wir die Firewall aktivieren mit Eingabe von:

      Tippen Sie „y“ und drücken Sie ‚Eingabe‘, um fortzufahren. Sie können sehen, dass SSH-Verbindungen noch erlaubt sind, wenn Sie folgendes eingeben:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

      Da die Firewall gegenwärtig alle Verbindungen außer SSH blockiert, ist es bei Installierung und Konfigurierung von zusätzlichen Services erforderlich, dass Sie die Firewall-Einstellungen anpassen, um annehmbaren Verkehr zuzulassen. Sie können einige UFW-Operationen in dieser Anleitung erlernen.

      Schritt 5 — Aktivierung externer Zugriffe für Ihren normalen Nutzer

      Nun, da wir einen normalen Nutzer für den regelmäßigen Gebrauch haben, müssen wir sicherstellen, dass wir mit SSH direkt an das Konto anbinden können.

      Bemerkung: Bis zur Verifizierung, dass Sie sich anmelden und sudo mit Ihrem neuen Nutzer anwenden können, empfehlen wir Ihnen, als root angemeldet zu bleiben. Damit können Sie, falls Probleme auftauchen, Fehler beheben und erforderliche Änderungen als root vornehmen. Falls Sie ein DigitalOcean-Droplet nutzen und Probleme mit Ihrer root-SSH-Verbindung haben, können Sie sich beim Droplet unter Verwendung der DigitalOcean-Konsole anmelden.

      Der Konfigurierungs-Prozess für SSH-Zugang für Ihren neuen Nutzer hängt davon ab, ob das root-Konto Ihres Servers ein Passwort oder SSH-Schlüssel zur Authentifizierung nutzt.

      Wenn das Rootkonto Passwort-Authentifizierung nutzt.

      Wenn Sie sich bei Ihrem root-Konto mit einem Passwort anmelden, dann ist die Passwort-Authentifizierung für SSH aktiviert*. Sie können eine SSH-Verbindung zu Ihrem neuen Nutzerkonto aufbauen, indem Sie eine neue Terminalsitzung öffnen und SSH mit Ihrem neuen Nutzernamen nutzen.

      Nach Eingabe Ihres normalen Nutzerpassworts sind Sie angemeldet. Beachten Sie, dass Sie bei erforderlicher Ausführung eines Befehls mit administrativen Rechten, das Wort ‚sudo‘ davorstellen müssen, wie folgt:

      Sie werden nach Ihrem normalen Nutzerpasswort gefragt, wenn Sie ‚sudo‘ das erste Mal bei jeder Sitzung benutzen (und in periodischen Zeitabständen danach).

      Zur Erhöhung der Sicherheit Ihres Servers empfehlen wir dringend, SSH-Schlüssel zu erstellen, anstatt Passwort-Authentifizierung einzusetzen. Folgen Sie unserer Anleitung SSH-Schlüssel auf Ubuntu 18.04 herstellen, um die Konfigurierung schlüsselbasierter Authentifizierung zu erlernen.

      Wenn das Root-Konto schlüsselbasierte Authentifizierung nutzt.

      Wenn Sie sich bei Ihrem root-Konto mit SSH-Schlüsseln anmelden, dann ist die Passwort-Authentifizierung für SSH deaktiviert. Sie müssen der ~/.ssh/authorized_keysDatei des neuen Nutzers eine Kopie Ihres lokalen öffentlichen Schlüssels hinzufügen, um sich erfolgreich anzumelden.

      Da Ihr öffentlicher Schlüssel schon in der Root-Konto-Datei ~/.ssh/authorized_keys auf dem Server enthalten ist, können wir diese Datei und Ordnerstruktur in unser neues Nutzerkonto in unserer bestehenden Sitzung kopieren.

      Die einfachste Art und Weise, die Dateien mit der korrekten Eigentümern und Berechtigungen zu kopieren, ist mithilfe des Befehls ‚rsync‘. Dabei werden das ‚.ssh‘-Ordnerverzeichnis des root-Nutzers kopiert, die Berechtigungen erhalten und die Dateibesitzer modifiziert, alles mit einem einzigen Befehl. Stellen Sie sicher, dass Sie die hervorgehobenen Teile des nachfolgenden Befehls so ändern, dass sie mit dem Namen Ihres regelmäßigen Nutzers übereinstimmen.

      Bemerkung: Der ‚rsync‘ Befehl behandelt Quellen und Ziele, die mit einem Schrägstrich enden, anders als jene ohne einen nachgestellten Schrägstrich. Wenn Sie ‚rsync‘ unten nutzen, stellen Sie sicher, dass das Quellverzeichnis (~/.ssh) keinen nachgestellten Schrägstrich beinhaltet (nachprüfen, dass Sie ~/.ssh/ nicht benutzen).

      Sollten Sie ausversehen dem Befehl einen Schrägstrich hinzufügen, kopiert ‚rsync‘ den Inhalt des ~/.ssh-Verzeichnisses desRoot-Kontos in das Home-Verzeichnis des ‚sudo‘-Nutzers anstatt die gesamte ~/.ssh Verzeichnisstruktur zu kopieren. Die Dateien werden am falschen Ort abgelegt und SSH wird nicht in der Lage sein, sie zu finden und zu nutzen.

      • rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy

      Sie können nun eine neue Terminalsitzung öffnen und SSH mit Ihrem neuen Nutzernamen nutzen:

      Sie sollten im neuen Nutzerkonto ohne Eingabe eines Passworts angemeldet sein. Beachten Sie, dass Sie bei erforderlicher Ausführung eines Befehls mit administrativen Rechten, das Wort ‚sudo‘ davorstellen müssen, wie folgt:

      Sie werden nach Ihrem normalen Nutzerpasswort gefragt, wenn Sie ‚sudo‘ das erste Mal bei jeder Sitzung benutzen (und in periodischen Zeitabständen danach).

      Wie geht es weiter von hier aus?

      An dieser Stelle haben Sie eine solide Grundlage für Ihren Server. Sie können nun die Software installieren, die Sie auf Ihrem Server benötigen.



      Source link