2322826

Webserver optimieren: So decken Sie Schwachstellen auf

18.01.2018 | 10:14 Uhr |

Alle Linux-Distributionen haben Apache und Nginx in ihren Paketquellen. Die dabei mitgelieferte Konfiguration geht von leistungsfähiger Hardware aus. Auf schwacher Hardware und unter hoher Last gibt es Anpassungsbedarf.

Zog der Webserver Apache einst einsam seine Kreise, so drängt inzwischen ein anderer Webserver in die Weiten des Web, wie der Branchendienst Netcraft nach Auswertung von 1,8 Milliarden Domains im Oktober 2017 abermals gezeigt hat: Auf aktiven Sites holt der besonders performante Webserver Nginx mit 21 Prozent Anteil beständig auf (Apache: 44 Prozent).

Gerade die Administratoren großer Webseiten mit viel Traffic schätzen den schlanken Server Nginx, der dank seines Aufbaus sehr effizient arbeitet.

Auch ein schwächlicher Webserver auf einem Raspberry Pi oder auf einem günstigen Rootserver bei einem Webhoster kann mit Nginx zur Hochform auflaufen und mehr Besucher bedienen. Damit ist Apache aber keineswegs obsolet, denn er glänzt mit einer erfreulichen Anzahl an Modulen, die dem Webserver beispielsweise PHP, Perl und Python vergleichsweise unkompliziert beibringen.

Apache oder Nginx: In jedem Fall gibt es nach der Installation mit Standardwerten noch Optimierungspotenzial.

Relevant: So klappt die Einrichtung von Apache

Apache2buddy: Hilfe für Apachen

Eine gute Orientierung, wo es bei einer Apache-Konfiguration noch Bedarf an Feintuning gibt, liefert das Perl-Script „ Apache- 2buddy “. Es überprüft nach dem Aufruf in der Shell des Webservers die diversen Konfigurationsdateien einer Apache-Installation und des PHP-Moduls. Das Script gibt Hinweise auf mögliche Probleme und Optimierungsmöglichkeiten.

Der Download des Scripts auf den Webserver erfolgt dort in der Shell direkt mit dem Tool wget:

wget https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl 

Das Script verlangt root- beziehungsweise sudo-Privilegien zum Aufruf:

sudo perl apache2buddy.pl  

Im Terminal zeigt Apache2buddy nun der Reihe nach die überprüften Parameter an. Am Ende folgt eine Zusammenfassung mit Empfehlungen, wobei die wichtigsten Hinweise rot ausgezeichnet sind. Diese Empfehlungen verlangen meist noch Recherche in der Dokumentation zu Apache , wo die betreffende Einstellung genau zu finden ist.

Ein praktisches Beispiel: Auf vielen Ein-Platinen-Systemen wie dem Raspberry Pi wird Apache2buddy den Hinweis „Your MaxRequestWorkers setting is too high“ und darunter eine Empfehlung geben. Der Parameter „MaxRequestWorkers“ befindet sich in der Konfigurationsdatei „/etc/apache2/mods-enabled/mpm_prefork.conf“ und hat standardmäßig den Wert „150“. Mit einem Texteditor setzen Sie diesen Parameter nun auf den empfohlenen Wert von Apache- 2buddy und starten den Webserver neu.

Tipp: So lösen Sie typische Apache- und Nginx-Probleme

Feineinstellungen für Nginx

Das häufig aktualisierte Perl-Script nimmt auf dem Webserver die Apache-Konfiguration unter die Lupe.
Vergrößern Das häufig aktualisierte Perl-Script nimmt auf dem Webserver die Apache-Konfiguration unter die Lupe.

Auch wenn die Standardkonfiguration für Nginx zunächst weniger Optimierungsbedarf hat, so kann sich auf Servern mit beschränkten Ressourcen die Anpassung folgender Parameter lohnen.

Anzahl der Prozesse: Nginx liefert laut Dokumentation die beste Leistung, wenn der Server für jeden Prozessorkern einen Prozess startet. Damit dies automatisch geschieht, sollte in der Konfigurationsdatei „/etc/nginx/nginx.conf“ der Parameter „worker_processes“ diesen Wert haben:

worker_processes auto  

Eine Ausnahme sind schwächliche Platinen wie der Raspberry Pi. Hier sollte die Zahl der „worker_processes“ niedriger sein, denn das System ist sonst schnell überlastet und gerät an die Grenzen seines Arbeitsspeichers. Für ältere Raspberry-Pi-Platinen der ersten Generation ist nur der Wert „1“ akzeptabel, für den Raspberry Pi 2/3 ist der Wert „2“ empfehlenswert.

Anzahl der Verbindungen: Jeder laufende Nginx-Prozess kann maximal eine vorgegebene Zahl an Verbindungen bedienen. Festgelegt ist diese Zahl im Parameter „worker_connections“.

worker_connections 786 

Jeder Webseitenbesuch baut mindestens zwei Verbindungen auf, sodass diese Zahl nicht den maximal möglichen Clients entspricht. Auf einem Serverboliden mit mehreren GB Speicher kann man den Wert auf 1024 erhöhen, auf einer Platine mit begrenztem Speicher eher reduzieren: „512“ ist ein passender Wert für einen Raspberry Pi 2/3, „256“ ist auf dem Raspberry Pi 1 und Zero realistisch.

Reverse Proxy: Nginx vorschalten

Die Parameter „worker_processes“ und „worker_connections“ sollten auf Ein-Platinen-Computern reduziert werden.
Vergrößern Die Parameter „worker_processes“ und „worker_connections“ sollten auf Ein-Platinen-Computern reduziert werden.

Einen bestehenden Apache-Server gegen Nginx auszutauschen, ist mit Aufwand verbunden. Die größten Hindernisse sind umfangreiche „.htaccess“-Dateien von Apache, die umgeschrieben werden müssen, und die PHP-Konfiguration mittels PHP-FPM ist anspruchsvoller. Oft ist ein Umzug aber gar nicht nötig, denn Nginx erfüllt seinen Zweck auch als umgekehrter Proxyserver, der vor den Apache geschaltet wird und Anfragen annimmt, während sich Apache im Hintergrund ganz auf die dynamischen Inhalte konzentrieren kann. Der Aufbau nennt sich „Reverse Proxy“ und setzt einen Apache-Server voraus, denn man auf internen Localhost (127.0.0.1) auf einem hohen Port wie 8000 lauschen lässt. Auf Port 80 nimmt Nginx auf der öffentlich erreichbaren IP-Adresse alle Anfragen entgegen und verbindet sich intern mit Apache, um von dort die angeforderten Inhalte durchzureichen. Im einfachsten Fall gelingt dies in der Site-Konfiguration von Nginx schon mit diesen zwei Zeilen:

proxy_pass http://localhost:8000;  include /etc/nginx/proxy_params;  

Belastungstest: Webserver im Stress

Wie sich ein Webserver unter Last verhält, zeigt das Werkzeug „Siege“. Es flutet den Zielserver mit eine konfigurierbaren Anzahl von Anfragen und kann schon über eine DSL-Verbindung eine ordentliche Last erzeugen. Es ist deshalb wichtig, nur zeitlich begrenzte Stresstests zu starten – und natürlich sollte man nur eigene Server belagern. Debian, Ubuntu, Mint und Fedora stellen das Tool über das Paket mit dem Namen „siege“ bereit. Das Kommando

siege -c50 -b [URL]  

öffnet 50 Verbindungen zur angegebenen Adresse und lässt den Test endlos weiterlaufen, bis ihn die Tastenkombination Strg-C abbricht. Anschließend zeigt Siege eine Statistik der Messwerte an.

PC-WELT Marktplatz

0 Kommentare zu diesem Artikel
2322826