Apache installieren: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
|||
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Der [http://httpd.apache.org/ Apache] ist ein Webserver zur Beantwortung von HTTP-Requests und wird üblicherweise zur Auslieferung von Webseiten genutzt. Auf HS Systemen läuft ein | __TOC__ | ||
Der [http://httpd.apache.org/ Apache] ist ein Webserver zur Beantwortung von HTTP-Requests und wird üblicherweise zur Auslieferung von Webseiten genutzt. Auf HS Systemen läuft ein zentraler Apache, der standardmäßig die Anfragen für die in den Paketen aufgeschalteten Domains verarbeitet und die Webseiten ausliefert. | |||
Unter Umständen kann es sinnvoll sein, einen eigenen Apache zu betreiben, vor allem dann, wenn man Apache Module betreiben möchte, die vom zentralen Apache (z.B. aus Sicherheitsgründen im Shared Hosting) nicht zur Verfügung gestellt werden. | Unter Umständen kann es sinnvoll sein, einen eigenen Apache zu betreiben, vor allem dann, wenn man Apache Module betreiben möchte, die vom zentralen Apache (z.B. aus Sicherheitsgründen im Shared Hosting) nicht zur Verfügung gestellt werden. | ||
Es gibt zwei Möglichkeiten, einen eigenen Apache bei HS zu betreiben: | |||
* '''Mit einer Portumleitung'''(Port Forwarding). Hierbei werden Requests auf die eigene IP:Port80 umgeleitet auf (z.B) Port 8080. Diese Option ist hier beschrieben. | |||
* '''Hinter mod_proxy des zentralen Apaches'''. Dieser Betriebsmodus hat den Vorteil, pro Domain/Subdomain wählen zu können, ob man die Requests an den eigenen Apache delegiert. Es besteht somit die Möglichkeit weiterhin Domain-Admins zu verwenden und den eigenen Apache selektiv nur für den Service einzusetzen, für den man ihn braucht, während alle anderen Services durch den zentralen und betreuten Apache abgedeckt werden. | |||
== Voraussetzungen == | == Voraussetzungen == | ||
Zeile 15: | Zeile 22: | ||
Hilfreich sind die Meldungen, die der Apache selbst in den Log-Dateien ausgibt und seine Möglichkeiten zu Überprüfung der Konfiguration. Hier der Configtest: | Hilfreich sind die Meldungen, die der Apache selbst in den Log-Dateien ausgibt und seine Möglichkeiten zu Überprüfung der Konfiguration. Hier der Configtest: | ||
< | <syntaxhighlight lang="shell"> | ||
xyz00@h00:~/etc/apache2$ /usr/sbin/apache2 -f /home/pacs/xyz00/etc/apache2/apache2.conf -t | xyz00@h00:~/etc/apache2$ /usr/sbin/apache2 -f /home/pacs/xyz00/etc/apache2/apache2.conf -t | ||
Syntax OK | Syntax OK | ||
</ | </syntaxhighlight> | ||
Den sollte man unbedingt ausführen, bevor man eine geänderte Konfiguration durch Neustart des Apachen übernimmt. | Den sollte man unbedingt ausführen, bevor man eine geänderte Konfiguration durch Neustart des Apachen übernimmt. | ||
Zeile 28: | Zeile 35: | ||
Hier wird die eigene IP '''111.222.333.444''', und das HS-Paket '''xyz00''' angenommen, sowie, dass das Verzeichnis '''/home/pacs/xyz00/etc/apache2/run/''' existiert. In der Konfigurationsdatei apache2.conf werden folgende Direktiven angepasst: | Hier wird die eigene IP '''111.222.333.444''', und das HS-Paket '''xyz00''' angenommen, sowie, dass das Verzeichnis '''/home/pacs/xyz00/etc/apache2/run/''' existiert. In der Konfigurationsdatei apache2.conf werden folgende Direktiven angepasst: | ||
< | <syntaxhighlight lang="apache" line> | ||
ServerRoot /home/pacs/xyz00/etc/apache2 | |||
ServerName xyz00.hostsharing.net | |||
ServerAdmin xyz00@xyz00.hostsharing.net | |||
User xyz00 | |||
Group xyz00 | |||
Listen 111.222.333.444:8080 | |||
Listen 111.222.333.444:8443 | |||
NameVirtualHost 111.222.333.444:8443 | |||
NameVirtualHost 111.222.333.444:8080 | |||
LockFile /home/pacs/xyz00/etc/apache2/run/apache2.lock | |||
PidFile /home/pacs/xyz00/etc/apache2/run/apache2.pid | |||
</ | </syntaxhighlight> | ||
=== Logging === | === Logging === | ||
<syntaxhighlight lang="apache" line> | |||
ErrorLog /home/pacs/xyz00/var/web.err | |||
CustomLog /home/pacs/xyz00/var/web.log combined | |||
</syntaxhighlight> | |||
Diese Benennung der Logdateien zusammen mit dem aus der Konfiguration des zentralen Apache übernommenen Format der Logs hat den Vorteil, dass die Logdateien jede Nacht vom zentralen HS-Skript rotiert werden. | Diese Benennung der Logdateien zusammen mit dem aus der Konfiguration des zentralen Apache übernommenen Format der Logs hat den Vorteil, dass die Logdateien jede Nacht vom zentralen HS-Skript rotiert werden. | ||
Zeile 59: | Zeile 67: | ||
Der Apache erlaubt das Einbinden weiterer Konfigurationsdateien mit der "Include"-Direktive. Damit und mittels per Symlink in Verzeichnisse gelinkter Konfigurationsdateien lässt er sich sehr flexibel konfigurieren. Als Beispiel sei die einsehbare Konfiguration des zentralen Apache unter /etc/apache2 genannt. Mit folgenden Beispiel-Direktiven lassen sich alle Dateien von Konfigurationsverzeichnissen einbinden: | Der Apache erlaubt das Einbinden weiterer Konfigurationsdateien mit der "Include"-Direktive. Damit und mittels per Symlink in Verzeichnisse gelinkter Konfigurationsdateien lässt er sich sehr flexibel konfigurieren. Als Beispiel sei die einsehbare Konfiguration des zentralen Apache unter /etc/apache2 genannt. Mit folgenden Beispiel-Direktiven lassen sich alle Dateien von Konfigurationsverzeichnissen einbinden: | ||
<syntaxhighlight lang="apache" line> | |||
Include /home/pacs/xyz00/etc/apache2/conf.d/ | |||
Include /home/pacs/xyz00/etc/apache2/mods-enabled/ | |||
Include /home/pacs/xyz00/etc/apache2/sites-enabled/ | |||
</syntaxhighlight> | |||
== Start- und Stopskripte == | == Start- und Stopskripte == | ||
Zeile 69: | Zeile 79: | ||
=== Startskript ~/etc/apache2/start-apache.sh === | === Startskript ~/etc/apache2/start-apache.sh === | ||
<syntaxhighlight lang="shell" line> | |||
#! /bin/bash | |||
/usr/sbin/apache2 -f /home/pacs/xyz00/etc/apache2/apache2.conf | |||
</syntaxhighlight> | |||
=== Stopskript ~/etc/apache2/start-apache.sh === | === Stopskript ~/etc/apache2/start-apache.sh === | ||
<syntaxhighlight lang="shell" line> | |||
#! /bin/bash | |||
pid=$(cat /home/pacs/xyz00/etc/apache2/run/apache2.pid) | |||
kill -TERM $pid | |||
</syntaxhighlight> | |||
Wenn der eigene Apache mit mod_fcgid läuft, ist es sinnvoll (wenn auch nicht besonders schön oder elegant), bei einem Stop des Apache die unter der eigenen Benutzerkennung laufenden FCGI-Prozesse abzuwürgen. Hier wird angenommen, dass sich die Sockets innerhalb der Verzeichnisstruktur '''~/etc/apache2/run/''' befinden. Das zusätzliche Abwürgen des Apache (trotz vorherigem Beenden weiter oben) und die Löschbefehle für die diversen Socketdateien stammt aus der Konfiguration des eigenen Apachen des Autors und funktioniert so auch. | Wenn der eigene Apache mit mod_fcgid läuft, ist es sinnvoll (wenn auch nicht besonders schön oder elegant), bei einem Stop des Apache die unter der eigenen Benutzerkennung laufenden FCGI-Prozesse abzuwürgen. Hier wird angenommen, dass sich die Sockets innerhalb der Verzeichnisstruktur '''~/etc/apache2/run/''' befinden. Das zusätzliche Abwürgen des Apache (trotz vorherigem Beenden weiter oben) und die Löschbefehle für die diversen Socketdateien stammt aus der Konfiguration des eigenen Apachen des Autors und funktioniert so auch. | ||
<syntaxhighlight lang="shell" line> | |||
sleep 1 | |||
killall -u xyz00 -KILL apache2 | |||
killall -u xyz00 -KILL php | |||
rm ~/etc/apache2/run/fcgisock/* | |||
rm ~/etc/apache2/run/apache2.pid | |||
rm ~/etc/apache2/run/cgisock* | |||
</syntaxhighlight> | |||
== Überwachung und Start bei Systemstart == | == Überwachung und Start bei Systemstart == | ||
Zeile 100: | Zeile 115: | ||
Eine funktionierende Konfiguration für mod_fcgid sieht daher so aus: | Eine funktionierende Konfiguration für mod_fcgid sieht daher so aus: | ||
< | <syntaxhighlight lang="apache" line> | ||
SocketPath /home/pacs/xyz00/etc/apache2/run/fcgisock | SocketPath /home/pacs/xyz00/etc/apache2/run/fcgisock | ||
SharememPath /home/pacs/xyz00/etc/apache2/run/shm | SharememPath /home/pacs/xyz00/etc/apache2/run/shm | ||
Zeile 126: | Zeile 141: | ||
IPCConnectTimeout 20 | IPCConnectTimeout 20 | ||
</IfModule> | </IfModule> | ||
</ | </syntaxhighlight> | ||
== Weblinks == | == Weblinks == |
Aktuelle Version vom 20. Juni 2024, 13:57 Uhr
Der Apache ist ein Webserver zur Beantwortung von HTTP-Requests und wird üblicherweise zur Auslieferung von Webseiten genutzt. Auf HS Systemen läuft ein zentraler Apache, der standardmäßig die Anfragen für die in den Paketen aufgeschalteten Domains verarbeitet und die Webseiten ausliefert.
Unter Umständen kann es sinnvoll sein, einen eigenen Apache zu betreiben, vor allem dann, wenn man Apache Module betreiben möchte, die vom zentralen Apache (z.B. aus Sicherheitsgründen im Shared Hosting) nicht zur Verfügung gestellt werden.
Es gibt zwei Möglichkeiten, einen eigenen Apache bei HS zu betreiben:
- Mit einer Portumleitung(Port Forwarding). Hierbei werden Requests auf die eigene IP:Port80 umgeleitet auf (z.B) Port 8080. Diese Option ist hier beschrieben.
- Hinter mod_proxy des zentralen Apaches. Dieser Betriebsmodus hat den Vorteil, pro Domain/Subdomain wählen zu können, ob man die Requests an den eigenen Apache delegiert. Es besteht somit die Möglichkeit weiterhin Domain-Admins zu verwenden und den eigenen Apache selektiv nur für den Service einzusetzen, für den man ihn braucht, während alle anderen Services durch den zentralen und betreuten Apache abgedeckt werden.
Voraussetzungen
- eigene IP: Eine eigene IP muss von den Hostmastern eingerichet werden. Dies erfordert die kostenpflichtige Buchung der Option "eigener Apache".
Konfiguration ~/etc/apache2.conf
Die Konfiguration eines Apache kann hier nicht beschrieben werden, dafür gibt es ziemlich dicke Bücher. Nur ein paar Hinweise:
- Die Konfiguration des zentralen Apache kann in großen Teilen übernommen werden, man kann also gut /etc/apache2 in das eigene Benutzerverzeichnis ~/etc/apache2 kopieren, Pfade anpassen und einmal damit starten. Aber sei gewarnt: Den Apache (auch mit Vorwissen) zum Laufen zu bringen, braucht Wissen, Zeit und Geduld. Wer nicht ein Grundwissen in Linux-Administration mitbringt, sollte davon Abstand nehmen.
Hilfreich sind die Meldungen, die der Apache selbst in den Log-Dateien ausgibt und seine Möglichkeiten zu Überprüfung der Konfiguration. Hier der Configtest:
xyz00@h00:~/etc/apache2$ /usr/sbin/apache2 -f /home/pacs/xyz00/etc/apache2/apache2.conf -t
Syntax OK
Den sollte man unbedingt ausführen, bevor man eine geänderte Konfiguration durch Neustart des Apachen übernimmt.
Grundkonfiguration mit Portumleitung
- Voraussetzung: Portumleitungen Port 80 -> 8080 und bei Bedarf 443 -> 8443 von einem Hostmaster eingerichtet.
Hier wird die eigene IP 111.222.333.444, und das HS-Paket xyz00 angenommen, sowie, dass das Verzeichnis /home/pacs/xyz00/etc/apache2/run/ existiert. In der Konfigurationsdatei apache2.conf werden folgende Direktiven angepasst:
ServerRoot /home/pacs/xyz00/etc/apache2
ServerName xyz00.hostsharing.net
ServerAdmin xyz00@xyz00.hostsharing.net
User xyz00
Group xyz00
Listen 111.222.333.444:8080
Listen 111.222.333.444:8443
NameVirtualHost 111.222.333.444:8443
NameVirtualHost 111.222.333.444:8080
LockFile /home/pacs/xyz00/etc/apache2/run/apache2.lock
PidFile /home/pacs/xyz00/etc/apache2/run/apache2.pid
Logging
ErrorLog /home/pacs/xyz00/var/web.err
CustomLog /home/pacs/xyz00/var/web.log combined
Diese Benennung der Logdateien zusammen mit dem aus der Konfiguration des zentralen Apache übernommenen Format der Logs hat den Vorteil, dass die Logdateien jede Nacht vom zentralen HS-Skript rotiert werden.
Einbinden weiterer Konfigurationsdateien
Der Apache erlaubt das Einbinden weiterer Konfigurationsdateien mit der "Include"-Direktive. Damit und mittels per Symlink in Verzeichnisse gelinkter Konfigurationsdateien lässt er sich sehr flexibel konfigurieren. Als Beispiel sei die einsehbare Konfiguration des zentralen Apache unter /etc/apache2 genannt. Mit folgenden Beispiel-Direktiven lassen sich alle Dateien von Konfigurationsverzeichnissen einbinden:
Include /home/pacs/xyz00/etc/apache2/conf.d/
Include /home/pacs/xyz00/etc/apache2/mods-enabled/
Include /home/pacs/xyz00/etc/apache2/sites-enabled/
Start- und Stopskripte
Um den eigenen Apache zu starten und zu stoppen, müssen eigene Skripte geschrieben werden. In diesem Beispiel wird angenommen, dass sich die Konfiguration in ~/etc/apache2 (/home/pacs/xyz00/etc/apache2) befindet, dort sind ebenfalls die Skripte für Start und Stop.
Startskript ~/etc/apache2/start-apache.sh
#! /bin/bash
/usr/sbin/apache2 -f /home/pacs/xyz00/etc/apache2/apache2.conf
Stopskript ~/etc/apache2/start-apache.sh
#! /bin/bash
pid=$(cat /home/pacs/xyz00/etc/apache2/run/apache2.pid)
kill -TERM $pid
Wenn der eigene Apache mit mod_fcgid läuft, ist es sinnvoll (wenn auch nicht besonders schön oder elegant), bei einem Stop des Apache die unter der eigenen Benutzerkennung laufenden FCGI-Prozesse abzuwürgen. Hier wird angenommen, dass sich die Sockets innerhalb der Verzeichnisstruktur ~/etc/apache2/run/ befinden. Das zusätzliche Abwürgen des Apache (trotz vorherigem Beenden weiter oben) und die Löschbefehle für die diversen Socketdateien stammt aus der Konfiguration des eigenen Apachen des Autors und funktioniert so auch.
sleep 1
killall -u xyz00 -KILL apache2
killall -u xyz00 -KILL php
rm ~/etc/apache2/run/fcgisock/*
rm ~/etc/apache2/run/apache2.pid
rm ~/etc/apache2/run/cgisock*
Überwachung und Start bei Systemstart
Die Überwachung des Apachen genauso wie der Start beim Hochfahren des Systems wird mit Monit gewährleistet. Dies muss natürlich entsprechend konfiguriert werden.
Hinweise und Erfahrungswerte
mod_fcgid
Die Konfiguration des zentralen Apachen (in /etc/apache2/mods-enabled/fcgid.conf) kann nicht ohne Änderung übernommen werden. Dass der darin befindliche Pfad zum Verzeichnis für die Sockets SocketPath /var/run/apache2/fcgisock geändert werden muss, sollte klar sein. Aber der Apache möchte mit mod_fcgid noch eine Datei "shm" für Shared Memory anlegen. Und wenn dies nicht explizit konfiguriert wurde, standardmäßig in /var/lib/apache2/fcgid/shm. Das ist für den eigenen Apache natürlich nicht möglich, er hat da keine Schreibrechte. Er läuft dann zwar ohne Fehler los, liefert aber keine Seiten aus.
Eine funktionierende Konfiguration für mod_fcgid sieht daher so aus:
SocketPath /home/pacs/xyz00/etc/apache2/run/fcgisock
SharememPath /home/pacs/xyz00/etc/apache2/run/shm
IPCConnectTimeout 20
IPCCommTimeout 600
IdleTimeout 300
IdleScanInterval 120
BusyTimeout 300
BusyScanInterval 120
ErrorScanInterval 10
ZombieScanInterval 9
ProcessLifeTime 3600
SpawnScoreUpLimit 100
SpawnScore 1.
TerminationScore 2.
MaxProcessCount 250
DefaultMaxClassProcessCount 10
DefaultMinClassProcessCount 3
PHP_Fix_Pathinfo_Enable 1
OutputBufferSize 256
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
IPCConnectTimeout 20
</IfModule>