Diese Seite erklärt, wie Sie mit Webmin den Apache Webserver konfigurieren . Es umfasst virtuelle Hosts, IP-Zugriffskontrolle, Passwortbeschränkungen und vieles mehr.
Einführung in Apache
Apache ist der beliebteste HTTP-Server des Internets, aufgrund seiner Nullkosten, breiten Verfügbarkeit und seines großen Funktionsumfangs. Alle Linux-Distributionen enthalten es als Standardpaket und es kann auf jeder anderen von Webmin unterstützten Unix-Variante installiert oder kompiliert werden. Es hat jedoch eine sehr große Anzahl von Optionsdirektiven, die in einer Textkonfigurationsdatei definiert sind, und kann daher für einen unerfahrenen Administrator schwierig einzurichten sein.
Im Laufe der Jahre seit seiner Einführung wurden viele Versionen von Apache veröffentlicht. Beginnend mit 1.0 bis hin zu den aktuellen Serien 1.3 und 2.2 enthält jede Version mehr Funktionen und Optionen. Die grundlegende Webserving-Funktionalität und das Layout der Konfigurationsdatei sind im Wesentlichen gleich geblieben, obwohl sich die interne Implementierung erheblich geändert hat.
Apache hat ein modulares Design, bei dem jedes Modul für einen Teil seines gesamten Funktionsumfangs verantwortlich ist. Es gibt mehrere Standardmodule, die in fast jeder Installation von Apache enthalten sind, und viele weitere, die optional sind oder separat heruntergeladen werden müssen. Module können in die ausführbare Webserver-Datei kompiliert oder zur Laufzeit dynamisch aus gemeinsam genutzten Bibliotheken geladen werden. Diese modulare Architektur kann verwendet werden, um Speicher zu sparen, indem vermieden wird, dass Module geladen werden müssen, die keine nützliche Funktionalität für ein bestimmtes System bereitstellen.
Apache bezieht seine Konfiguration aus mehreren Textdateien, von denen jede eine Reihe von Anweisungen enthält, normalerweise eine pro Zeile. Jede Direktive hat einen Namen und einen oder mehrere Werte und legt eine Option wie den Pfad zu einer Protokolldatei oder den MIME-Typ für eine Datei fest. Welche Anweisungen Apache erkennt, hängt von den verwendeten Modulen ab. Die meisten Module fügen Unterstützung für mehrere Direktiven hinzu, um die von ihnen bereitgestellten Funktionen zu konfigurieren.
Oft möchten Sie mehr als eine Website auf einem einzigen Server hosten. Apache kann so konfiguriert werden, dass es abhängig von der Website, die von einem Browser angefordert wurde, eine andere Konfiguration verwendet. Jede dieser Sites wird als virtueller Host bezeichnet und in der Konfigurationsdatei mit einem speziellen
In ähnlicher Weise können die Abschnitte
Eine andere Methode zum Erstellen von Direktiven, die nur für ein einzelnes Verzeichnis gelten, besteht darin, sie in eine spezielle Konfigurationsdatei namens .htaccess zu schreiben die sich im Verzeichnis selbst befindet. Häufig werden diese Dateien von normalen Benutzern erstellt, damit sie ihre eigenen Websites konfigurieren können, ohne vollen Zugriff auf die Master-Konfigurationsdatei zu benötigen. Dies ist sehr nützlich auf einem System, das mehrere Sites hostet, die jeweils einem anderen Unix-Benutzer gehören, und nicht auf einem System mit nur einer Website, die vom Besitzer des Servers eingerichtet wird.
Das Apache Webserver-Modul
Dies ist eines der komplexesten und leistungsstärksten Webmin-Module, da Sie damit fast alle Funktionen von Apache konfigurieren können. Es kann die auf Ihrem System installierte Apache-Version und die verwendeten Module ermitteln und passt seine Benutzeroberfläche entsprechend an, sodass Sie nur die Anweisungen bearbeiten können, die der Webserver versteht. Die Benutzeroberfläche ist jedoch im Allgemeinen für alle Apache-Versionen gleich.
Da es so viele Direktiven gibt und das Modul versucht, die Konfiguration aller zu erlauben, gruppiert es Direktiven in Kategorien wie Prozesse und Grenzen, Netzwerke und Adressen und CGI-Programme. Diese Kategorien werden durch Symbole dargestellt, die erscheinen, wenn Sie einen virtuellen Server, ein Verzeichnis oder eine Optionsdatei im Modul öffnen. In allen Fällen können Sie die Einstellungen unter jeder Kategorie anzeigen und bearbeiten, indem Sie auf das entsprechende Symbol klicken.
Apache hat eine große Anzahl von Standardmodulen und eine noch größere Anzahl von separaten Modulen, die von anderen Personen entwickelt wurden. Webmin unterstützt die Bearbeitung von Direktiven in den meisten dieser Nicht-Standards nicht, wie z. B. mod_perl und mod_php. Es wird jedoch jede Konfigurationsdatei-Anweisung ignorieren, die es nicht versteht, sodass alle Einstellungen für nicht unterstützte Module, die Sie manuell vornehmen, nicht beschädigt werden.
Wenn Sie das Apache-Modul öffnen, wird die unten gezeigte Registerkartenseite angezeigt :
Die Hauptseite des Apache Webserver-ModulsAuf der ersten Registerkarte befinden sich Symbole für die verschiedenen Kategorien globaler Optionen sowie einige zusätzliche Funktionen. Im zweiten befindet sich eine Liste aller aktuellen virtuellen Server und im dritten ein Formular zum Hinzufügen eines neuen virtuellen Hosts. Wenn Sie sehr viele virtuelle Server auf Ihrem System haben (standardmäßig mehr als 100), wird stattdessen ein Suchformular zum Auffinden von Servern angezeigt. Der erste Server ist immer der spezielle Standardserver , die Anweisungen enthält, die für alle anderen virtuellen Server gelten, und verarbeitet Anforderungen, die andere Server nicht verarbeiten.
Natürlich funktioniert das Apache-Modul nicht, wenn Apache nicht auf Ihrem System installiert ist. In diesem Fall wird auf der Hauptseite anstelle des Modulkonfigurationsformulars oder der Liste der virtuellen Server eine Fehlermeldung angezeigt. Alle Linux-Distributionen enthalten ein Paket oder Pakete dafür auf ihrer CD-ROM oder Website, also installieren Sie es von dort mit dem Softwarepaketmodul, bevor Sie fortfahren.
Da das Modul davon ausgeht, dass sich die ausführbare Apache-Datei und die Konfigurationsdateien an den Speicherorten befinden, die vom Paket Ihrer Distribution verwendet werden, meldet es den gleichen Fehler, dass die Software nicht installiert wird, wenn Sie sie manuell kompiliert und installiert haben. Klicken Sie in diesem Fall auf die Modulkonfiguration Link und passen Sie die Pfade an die richtigen Speicherorte für Ihr System an.
Auf Unix-Versionen, die Apache nicht standardmäßig enthalten, geht Webmin davon aus, dass es von der Standardquelldistribution von www.apache.org installiert wird. Wenn Sie den Webserver aus einem optionalen Paket installiert haben, das für Ihr Betriebssystem verfügbar gemacht wurde, wird die Hauptseite beschweren, dass er nicht installiert ist und Sie die Modulkonfiguration anpassen müssen.
Die Benutzeroberfläche des Moduls ist ziemlich komplex und hat aufgrund der Komplexität und Leistungsfähigkeit der Apache-Konfigurationsdateien eine große Anzahl von Seiten, Formularen und Unterseiten. Es gibt jedoch Elemente der Benutzeroberfläche, die sich auf vielen Seiten im gesamten Modul wiederholen, z. B. :
- Kategoriesymbole Wenn Sie auf das Symbol für einen virtuellen Server, ein Verzeichnis oder eine Optionsdatei klicken, wird oben auf der Seite eine Tabelle mit Symbolen mit Namen wie MIME-Typen und CGI-Programmen angezeigt. Unter jedem dieser Symbole befinden sich Felder und Tabellen zum Konfigurieren von Optionen, die sich auf die Bezeichnung des Symbols beziehen, unter dem sie sich befinden. Dieses häufig verwendete Layout unterteilt die große Anzahl bearbeitbarer Apache-Optionen in Kategorien, da es viel zu viele Felder gibt, um sie auf einer einzigen Seite anzuzeigen. Die genauen Symbole, die angezeigt werden, und die Felder darunter unterscheiden sich je nach dem Teil der Webserver-Konfiguration, den Sie bearbeiten, und der installierten Apache-Version. Ihr grundsätzlicher Aufbau ist jedoch immer gleich.
- Tabellenfelder In vielen Formularen verwenden einige Felder Tabellen zum Eingeben mehrerer Werte, z. B. MIME-Typen und die zugehörigen Dateierweiterungen. Es gibt keine Begrenzung, wie viele Zeilen jede Tabelle haben kann, aber Webmin zeigt in jeder Tabelle immer nur eine einzige leere Zeile an. Dies hält die Größe von Formularen mit vielen Tabellen gering, bedeutet aber, dass Sie jeweils nur eine neue Zeile zu einer Tabelle hinzufügen können. Um mehr als ein Formular hinzuzufügen, müssen Sie das Formular speichern und erneut eingeben, wodurch eine neue leere Zeile unter der gerade ausgefüllten Zeile angezeigt wird.
In den folgenden Abschnitten wird genauer erläutert, auf welche Symbole geklickt und welche Tabellen ausgefüllt werden müssen, wenn beispielsweise CGI-Skripte aktiviert und MIME-Typen festgelegt werden.
Apache starten und stoppen
Bevor sich Browser mit dem Apache-Webserver auf Ihrem System verbinden können, muss dessen Serverprozess gestartet werden. Sie können überprüfen, ob es derzeit ausgeführt wird, indem Sie oben auf einer der Seiten im Modul nachsehen. Wenn Links mit Änderungen übernehmen gekennzeichnet sind und Apache stoppen erscheinen, dann ist es gerade aktiv. Erscheint ihnen jedoch nur der Link *Start Apache*, läuft er noch nicht.
Klicken Sie zum Starten auf Apache starten Verknüpfung. Wenn alles gut geht, wird die Seite, auf der Sie sich gerade befinden, erneut angezeigt und die Links oben sollten sich ändern, um anzuzeigen, dass sie jetzt ausgeführt wird. Andernfalls wird eine Fehlermeldung angezeigt, die erklärt, was schief gelaufen ist - höchstwahrscheinlich ist die Ursache ein Fehler in der Konfigurationsdatei.
Um den Webserver zu stoppen, sobald er läuft, klicken Sie auf Apache stoppen Link auf einer beliebigen Seite des Moduls. In dem unwahrscheinlichen Fall, dass Webmin den Server nicht stoppen kann, wird eine Seite mit Fehlermeldungen angezeigt. Wenn es erfolgreich gestoppt wird, wird dieselbe Seite erneut angezeigt, wobei die Links oben geändert werden, um anzuzeigen, dass es nicht mehr ausgeführt wird.
Wenn Apache aktiv ist, hat jede Seite ein Apply Changes Link oben, der verwendet werden kann, um dem Webserver zu signalisieren, seine aktuelle Konfiguration neu zu laden. Nachdem Sie in diesem Modul Änderungen vorgenommen haben (außer in .htaccess-Dateien), müssen Sie auf diesen Link klicken, um sie zu aktivieren. Im Gegensatz zu anderen Webmin-Modulen, die auf der Hauptseite einen Übernehmen-Button haben, hat dieses Modul ihn auf jeder Seite, sodass Sie nicht jedes Mal zum Index zurückkehren müssen, wenn Sie eine Änderung vornehmen.
Seiten auf Ihrem Webserver bearbeiten
In diesem Abschnitt wird erläutert, wie Sie die Dateien auf Ihrem System finden und bearbeiten, die angezeigt werden, wenn ein Client eine Verbindung zu Ihrem Apache-Webserver herstellt. Wenn Sie bereits wissen, wie das geht, können Sie es gerne überspringen und mit dem nächsten Abschnitt fortfahren.
Wenn Apache zum ersten Mal von einem Paket oder einer Quelle installiert wird, werden in der Anfangskonfiguration normalerweise keine virtuellen Server eingerichtet. Stattdessen existiert nur der Standardserver, der Seiten für jeden Client bereitstellt, der sich über Port 80 verbindet. Sie können die Standardseiten anzeigen, indem Sie einen Webbrowser ausführen und zur URL http://_yourhostname_/ oder http://_localhost_/ gehen, wenn Sie führen den Browser auf demselben System aus, auf dem Webmin ausgeführt wird. Die angezeigte Seite wird wahrscheinlich nur mit Apache oder Ihrer Linux-Distribution geliefert.
Das Dokumentenstammverzeichnis, aus dem Apache Dateien bereitstellt, wird auf der Hauptseite des Moduls neben dem Standardserver angezeigt Symbol. Unter Redhat Linux ist dieses Verzeichnis beispielsweise standardmäßig /home/httpd/html. Die Dateien in diesem Verzeichnis können bearbeitet werden, indem Sie sich als root anmelden oder das File Manager-Modul von Webmin verwenden. Alle Änderungen, die Sie vornehmen, werden sofort auf der Website wiedergegeben.
Wenn Ihr System nur eine einzelne statische Website hosten soll, ist es möglicherweise nicht erforderlich, andere Aspekte von Apache zu konfigurieren. Sie können einfach HTML-, Bild- und andere Dateien in das Verzeichnis und seine Unterverzeichnisse hochladen oder kopieren, um die gewünschte Website zu erstellen. Die wichtigste Datei ist index.html, die von Apache bereitgestellt wird, wenn ein Browser keine bestimmte Seite anfordert. Da die meisten Leute zuerst zu http://_yourserver_/ gehen, ist die Seite index.html die erste, die sie sehen.
Um die Bearbeitung zu vereinfachen, möchten Sie möglicherweise den Besitz des Dokumentstammverzeichnisses und aller seiner Dateien auf einen Nicht-Root-Benutzer ändern. Sie müssen jedoch sicherstellen, dass sie weiterhin für den Benutzer lesbar sind, unter dem der Apache-Serverprozess ausgeführt wird, der normalerweise httpd heißt. Der einfachste Weg, dies zu tun, besteht darin, alle Dateien und Verzeichnisse weltweit lesbar und weltweit ausführbar zu machen.
Erstellen eines neuen virtuellen Hosts
Wenn Sie mehrere Websites auf Ihrem System hosten möchten, müssen Sie für jede einen virtuellen Apache-Host erstellen. Bevor Sie eine Site hinzufügen können, muss ihre Adresse zuerst im DNS registriert werden, entweder auf einem DNS-Server auf Ihrem System oder auf einem anderen Host. Wenn die Dateien der Site einem anderen Unix-Benutzer gehören sollen als dem, dem das Dokument-Root-Verzeichnis gehört, dann muss dieser ebenfalls zuerst erstellt werden.
Der gesamte Prozess zum Hinzufügen eines virtuellen Servers, einschließlich der obigen Schritte, ist:
- Entscheiden Sie sich für einen Hostnamen, der in der URL für die neue Website verwendet wird, z. B. www.example.com .
- Entscheiden Sie, ob Ihre neue Website IP-basiert oder namensbasiert sein soll. Eine namensbasierte Website funktioniert mit allen außer mit alten Browsern und ist daher heutzutage bei weitem die beste Wahl. Eine IP-basierte Website funktioniert mit jedem Browser, benötigt jedoch eine eigene separate IP-Adresse, die Ihrem System hinzugefügt werden muss. Da IP-Adressen oft knapp sind, macht dies nur Sinn, wenn Sie für die Domain auch einen virtuellen FTP- oder POP3-Server einrichten müssen.
- Wenn Ihr Standort IP-basiert sein soll, verwenden Sie das Netzwerkkonfigurationsmodul (siehe Netzwerkkonfiguration), um der externen Netzwerkschnittstelle Ihres Systems eine neue virtuelle IP-Adresse hinzuzufügen. Stellen Sie sicher, dass es beim Booten aktiviert wird und jetzt aktiv ist. Wenn Ihrem System nur eine einzige statische Internet-IP-Adresse von Ihrem ISP zugewiesen wurde, funktionieren alle zusätzlichen virtuellen IP-Adressen, die Sie hinzufügen, nicht. In diesem Fall müssen Sie stattdessen einen namensbasierten virtuellen Server verwenden oder Ihren ISP auffordern, Ihnen mehrere Adressen zuzuweisen.
- Wenn example.com Domain bereits auf einem DNS-Server existiert, fügen Sie einen Eintrag für www.example.com hinzu mit der externen IP-Adresse Ihres Systems (bei einer namensbasierten Seite) oder der im vorherigen Schritt gewählten Adresse (bei einer IP-basierten Seite). Wenn die Domain noch nicht existiert, müssen Sie sie zu einem DNS-Server hinzufügen und bei einem DNS-Registrar wie Network Solutions registrieren. Wie auch immer, auf der Seite BIND DNS Server wird ausführlich erklärt, wie Datensätze und Domänen hinzugefügt werden.
- Wenn die Site den Standard-HTTP-Port 80 verwendet (was fast immer das ist, was Sie möchten), können Sie mit Schritt 8 fortfahren. Andernfalls klicken Sie auf der Hauptseite des Apache-Webserver-Moduls auf Networking and Adressen Symbol, um das im ersten Screenshot unten gezeigte Formular aufzurufen.
- In der leeren Zeile im Feld Listen auf Adressen und Ports Tabelle, wählen Sie Alle aus unter der Adresse Spalte und deaktivieren Sie Standard unter dem Port Säule. Geben Sie dann die TCP-Portnummer für Ihre Website in das Feld daneben ein und klicken Sie auf Speichern Schaltfläche unten auf der Seite.
- Scrollen Sie auf der Hauptseite des Moduls nach unten zum Formular *Neuen virtuellen Server erstellen* unterhalb der Liste der vorhandenen virtuellen Hosts.
- Wenn Sie einen IP-basierten virtuellen Server einrichten, in der Adresse Feld sollten Sie die virtuelle IP-Adresse eingeben, die in Schritt 3 hinzugefügt wurde. Wenn Sie einen namensbasierten virtuellen Server einrichten, geben Sie stattdessen die externe IP-Adresse Ihres Systems in das Feld ein. Wenn Ihr Apache-Server so konfiguriert wurde, dass er namensbasierte Verbindungen auf jeder IP-Adresse akzeptiert, können Sie Beliebig auswählen Option für dieses Feld stattdessen. Weitere Einzelheiten finden Sie in der nachstehenden Erläuterung. Wenn Ihr neuer virtueller Server einen anderen Port als 80 verwenden wird und der einzige Server an diesem Port sein wird, können Sie Beliebig auswählen Option, damit sie alle Anfragen verarbeitet, die auf dem Port eingehen.
- Wenn Sie einen IP-basierten virtuellen Server einrichten, deaktivieren Sie die Option Adresse des virtuellen Servers hinzufügen Kontrollkästchen. Bei namensbasierten Servern sollte es aktiviert bleiben.
- Wenn der neue virtuelle Host einen nicht standardmäßigen Port verwenden wird, wählen Sie die letzte Option für den Port Feld und geben Sie die Nummer in das Feld daneben ein.
- Im Dokumentenstamm geben Sie den vollständigen Pfad zu dem Verzeichnis ein, das Dateien für diese Website enthalten wird. Dies könnte beispielsweise /home/example/www sein .
- Im Servernamen Geben Sie in das Feld Hostnamen ein, die Clients verwenden, um auf diese Website zu verweisen, z. B. www.example.com . Sie können mehr als einen Namen eingeben, z. B. web.example.com und example.com wenn dies ein namensbasierter Server sein soll, der unter mehreren verschiedenen URLs erreichbar sein soll.
- Sofern Sie keine separate Datei auf Ihrem System haben, die alle virtuellen Hosts enthält, lassen Sie die Virtuelle Server zur Datei hinzufügen Feld auf Standard-httpd.conf-Datei gesetzt . Andernfalls können Sie Ausgewählte Datei auswählen und geben Sie den Pfad in das Feld daneben ein. Stellen Sie sicher, dass die ausgewählte Datei tatsächlich von Apache verwendet wird (z. B. durch eine Include-Anweisung in httpd.conf), oder der virtuelle Server wird nutzlos und erscheint nicht in Webmin. Wenn Sie immer dieselbe separate Datei zum Speichern virtueller Hosts verwenden, die Datei zum Hinzufügen virtueller Server zu Feld, das im Abschnitt Konfigurieren des Apache-Webserver-Moduls erläutert wird Abschnitt unten kann nützlich sein. Wenn es gesetzt ist, wird eine weitere Option zum Feld *Virtuellen Server zur Datei hinzufügen* hinzugefügt, um es der durch diese Modulkonfigurationsoption festgelegten Datei hinzuzufügen.
- Damit Webmin alle Anweisungen von einem anderen virtuellen Server auf den von Ihnen erstellten kopiert, wählen Sie ihn unter Anweisungen kopieren von aus Speisekarte. Dies kann nützlich sein, wenn alle Ihre virtuellen Hosts eine ähnliche Konfiguration haben.
- Wenn Sie das Formular ausgefüllt haben, klicken Sie auf Erstellen Taste. Der neue virtuelle Server wird der Apache-Konfigurationsdatei und der Liste der Server auf der Hauptseite hinzugefügt.
- Klicken Sie auf das Symbol für den neuen virtuellen Server, der Sie zu seiner Optionsseite bringt, die im zweiten Screenshot unten gezeigt wird.
- Scrollen Sie nach unten zum Formular unter Optionen pro Verzeichnis , und geben Sie das Dokumentstammverzeichnis, das Sie in Schritt 11 ausgewählt haben, in den Pfad ein Feld. Stellen Sie sicher, dass der Typ auf Verzeichnis eingestellt ist , und der Regexp? Feld auf Genaue Übereinstimmung .
- Klicken Sie auf Erstellen Schaltfläche, um der Konfigurationsdatei für das Verzeichnis einen neuen Abschnitt hinzuzufügen. Dies ist erforderlich, damit Sie Clients die Rechte zum Durchsuchen der darin enthaltenen Dateien gewähren können, die die standardmäßige Apache-Verzeichniskonfiguration verweigert.
- Klicken Sie auf das neue Symbol für das Verzeichnis, das zur Optionsseite des virtuellen Servers hinzugefügt wurde. Dadurch gelangen Sie zur Seite mit den Verzeichnisoptionen, die im dritten Screenshot unten gezeigt wird.
- Klicken Sie auf die Dokumentoptionen Symbol und ändern Sie auf dem angezeigten Formular die Verzeichnisoptionen Feld zu *Unten ausgewählt*. Unter Set for directory ändern Sie den Eintrag für Verzeichnisindizes generieren auf Ja . Klicken Sie dann auf Speichern Schaltfläche unten auf der Seite.
- Um alle Ihre Änderungen zu aktivieren, klicken Sie auf Änderungen übernehmen Schaltfläche oben auf jeder Seite.
- Sie oder der Benutzer, dem der virtuelle Server gehört, können jetzt damit beginnen, Dateien zum Dokumentenstammverzeichnis hinzuzufügen. Sie können es testen, indem Sie die URL (z. B. http://_www.example.com_/) in Ihrem Webbrowser öffnen, um sicherzustellen, dass alles ordnungsgemäß funktioniert.
Wenn Apache eine HTTP-Anfrage erhält, muss es zunächst herausfinden, für welchen virtuellen Server die Anfrage bestimmt ist. Es sucht zunächst nach einem namensbasierten virtuellen Server, dessen Hostname mit dem vom Client angeforderten Host übereinstimmt und dessen Adresse und Port dieselben sind wie die, mit denen sich der Client verbunden hat. Wenn keiner gefunden wird, wird stattdessen der erste definierte virtuelle Server für die Adresse und den Port verwendet, oder wenn keiner vorhanden ist, wird die Anfrage vom Standardserver behandelt.
Namensbasierte virtuelle Server können nur auf Adressen verwendet werden, die unter Adressen für virtuelle Namensserver aufgeführt sind Feld auf der globalen Netzwerk- und Adressenseite. Wenn Sie die obigen Anweisungen befolgen, wird dieser Liste automatisch eine Adresse hinzugefügt, wenn Sie einen neuen virtuellen Server erstellen. Wenn alle virtuellen Server auf Ihrem System namensbasiert sein sollen, können Sie diese Seite öffnen, * in das Feld eingeben und auf Speichern klicken damit Apache solche Anfragen auf jeder IP-Adresse verarbeitet. Dies ist auch sinnvoll, wenn Ihr System eine dynamisch zugewiesene IP-Adresse hat und Sie mehrere virtuelle Hosts bedienen möchten.
Sobald ein virtueller Server erstellt wurde, können Sie seine Einstellungen bearbeiten oder ihn löschen, indem Sie diesen Schritten folgen :
- Klicken Sie auf der Hauptseite des Moduls auf das Symbol des virtuellen Servers. Dadurch gelangen Sie zur Seite mit den Serveroptionen, die im obigen Screenshot gezeigt wird.
- Scrollen Sie nach unten zu den Virtual Server Details Formular unten auf der Seite.
- Ändern Sie die Adresse , Port und andere Felder nach Belieben und klicken Sie auf Speichern Taste. Diese Felder haben dieselbe Bedeutung wie auf dem Erstellungsformular für virtuelle Server. Wenn die Adresse jedoch auf einem namensbasierten virtuellen Server geändert wird, müssen Sie sie möglicherweise auch auf der globalen Seite „Netzwerk und Adressen“ ändern. Oder wenn Sie den virtuellen Server und alle darin enthaltenen Konfigurationsanweisungen löschen möchten, klicken Sie auf Virtuellen Server löschen Taste stattdessen.
- Klicken Sie auf der Hauptseite des Moduls auf Änderungen übernehmen Link, um die neuen Einstellungen zu aktivieren.
Sie können die Einstellungen für den Standardserver nicht ändern oder ihn löschen.
Festlegen von Optionen pro Verzeichnis
Apache erlaubt es Ihnen, verschiedene Optionen für bestimmte Verzeichnisse anzugeben, entweder für alle virtuellen Server oder nur für einen einzigen. Einschließlich Verzeichnisse können Sie tatsächlich Optionen festlegen, die für drei Arten von Objekten auf Ihrem Apache-Server gelten:
- Verzeichnis Die Optionen gelten für ein bestimmtes Verzeichnis und alle Dateien darin oder in Unterverzeichnissen, die es enthält.
- Dateien Die Optionen gelten für Dateien mit einem bestimmten Namen in einem beliebigen Verzeichnis.
- Standort Die Optionen gelten für alle Dateien oder Verzeichnisse, die von einer URL angefordert werden, deren Pfad mit dem angegebenen Speicherort beginnt. Zum Beispiel in der URL http://www.example.com/foo der Pfad wäre /foo .
Immer wenn Apache eine Anfrage verarbeitet, prüft es in einer festen Reihenfolge die Optionen, die darauf zutreffen. Die aus Verzeichnisabschnitten und .htaccess-Dateien werden zuerst gelesen, sodass die spezifischsten Verzeichnisse zuerst geprüft werden. Ihnen folgen dann Dateien und dann Ortsabschnitte. Dann werden Optionen von dem virtuellen Server gelesen, an den die Anfrage gestellt wurde (sofern vorhanden), und schließlich Optionen von dem Standardserver.
Die Seite mit den Optionen pro VerzeichnisDas bedeutet, dass Optionen, die für ein Verzeichnis eingestellt sind, dieselben Optionen überschreiben, die in einem Verzeichnis höherer Ebene oder auf dem virtuellen Server, dem es angehört, eingestellt sind. Um Optionen für ein Verzeichnis, Dateien oder einen URL-Speicherort festzulegen, gehen Sie wie folgt vor:
- Auch wenn die Optionen, die Sie einstellen werden, für ein Verzeichnis gelten, müssen sie unter einem der virtuellen Server oder dem Standardserver definiert werden. Wenn sie sich unter einem virtuellen Host befinden, gelten sie nur für Anforderungen an diesen Server für Dateien im ausgewählten Verzeichnis oder URL-Speicherort. Wenn sie sich jedoch unter dem Standardserver befinden, werden Anfragen an jeden virtuellen Host nach Dateien im Verzeichnis ausgeführt. Klicken Sie auf der Hauptseite des Moduls entweder auf Standardserver Symbol oder das Symbol für einen virtuellen Server, auf den Sie die Verzeichnisoptionen beschränken möchten. Für Verzeichnisse ist es normalerweise am einfachsten, ihre Optionen unter dem Standardserver zu platzieren, da jeder virtuelle Host normalerweise sein eigenes separates Dokumentenstammverzeichnis hat. URL-Standortoptionen sollten jedoch unter dem virtuellen Server platziert werden, auf den sie sich beziehen, da derselbe URL-Pfad auf mehr als einem virtuellen Host auf unterschiedliche Weise verwendet werden kann. Dasselbe gilt für Dateioptionen.
- Scrollen Sie auf der angezeigten Seite mit den Serveroptionen (siehe Abbildung 29-4) nach unten zum Formular *Create Per-Directory, Files or Location Options*.
- Aus dem Typ wählen Sie eine der oben beschriebenen Optionen.
- Wenn Sie Optionen für ein Verzeichnis festlegen, geben Sie es in den Pfad ein Feld wie /home/example/www/images . Sie können auch einen Platzhalterpfad wie /home/example/w* eingeben , wodurch die Optionen auf alle übereinstimmenden Verzeichnisse angewendet werden. Wenn die Optionen für einen URL-Speicherort festgelegt werden, geben Sie den Teil der URL nach dem Hostnamen in das Pfadfeld ein, z. B. /images . Sie können auch Shell-Platzhalterzeichen wie * und ? auch in der URL. Wenn Sie Optionen für Dateien festlegen, geben Sie einen Dateinamen in den Pfad ein Feld wie secret.html . Auch hier können Platzhalterzeichen im Dateinamen verwendet werden, zum Beispiel geheim*.
- Wenn Sie in der Lage sein möchten, komplexe reguläre Ausdrücke im Verzeichnis, Dateinamen oder URL-Speicherort zu verwenden, setzen Sie den Regexp? Feld auf Übereinstimmung mit regulärem Ausdruck . Dadurch können Sie reguläre Perl-Ausdruckszeichen wie [, ], +, verwenden. und * im Pfad.
- Klicken Sie auf Erstellen Schaltfläche, um den neuen Verzeichnisabschnitt zur Apache-Konfiguration hinzuzufügen. Die Optionsseite des virtuellen Servers wird erneut angezeigt, jedoch mit einem neuen Symbol für das Verzeichnis.
Nachdem Sie nun ein neues Symbol für ein Verzeichnis, einen URL-Speicherort oder einen Dateinamen erstellt haben, können Sie die dafür geltenden Optionen festlegen. Eine der häufigsten Änderungen pro Verzeichnis ist die Konfiguration, wie Dateien aufgelistet werden, wenn ein Browser ein Verzeichnis mit einer URL wie http://www.example.com/images/ anfordert. Wenn es eine index.html-Datei im Verzeichnis gibt, wird sie standardmäßig angezeigt, oder wenn nicht, wird stattdessen eine Seite angezeigt, die alle darin enthaltenen Dateien auflistet.
Wenn Sie den Namen der Indexdatei, den Stil des Verzeichniseintrags oder andere Einstellungen im Zusammenhang mit der Indexierung ändern möchten, gehen Sie wie folgt vor:
- Klicken Sie auf der Optionsseite des virtuellen Servers auf das Symbol für das Verzeichnis, das Sie konfigurieren möchten. Dadurch gelangen Sie zur Seite mit den Verzeichnisoptionen, die in Abbildung 29-5 gezeigt wird.
- Klicken Sie auf Verzeichnisindizierung Symbol, um ein Formular zum Festlegen von Indizierungs- und Auflistungsoptionen aufzurufen.
- Um das Erscheinungsbild von Verzeichniseinträgen zu ändern, setzen Sie das Feld *Verzeichnisindexoptionen* auf Unten ausgewählt und ändern Sie die Felder im Feld darunter. Die Standardeinstellungen generieren eine sehr einfache Liste von Dateien, aber Sie können sie verbessern, indem Sie die folgenden Optionen festlegen :
- Ausgefallene Verzeichnisindizes anzeigen Wenn diese Option aktiviert ist, enthält die Liste der Dateien ihr Symbol, ihre Größe und ihr Änderungsdatum.
- HTML-Titel als Beschreibung anzeigen Wenn aktiviert, wird die Beschreibung für HTML-Dateien von ihren
-Tags übernommen. - Symbolhöhe Mit dieser Option können Sie die Höhe der in der Verzeichnisliste enthaltenen Symbole ändern. Wenn es auf Standard eingestellt ist , wird die Höhe der Standard-Apache-Optionen verwendet.
- Symbolbreite Wie bei der vorherigen Option können Sie mit dieser Option die Breite der Symbole in der Verzeichnisliste angeben.
- Benutzersortierung der Spalte zulassen Wenn dies aktiviert ist, können Benutzer die Liste der Dateien sortieren, indem sie auf die Spaltenüberschriften klicken, sofern sie angezeigt werden.
- Dateibeschreibungen anzeigen Wenn diese Option aktiviert ist, enthält die Verzeichnisliste eine Beschreibung für jede Datei, die ihrem MIME-Typ oder HTML-Titel entnommen wird.
- HTML-Header-Tags ausgeben Wenn aktiviert, enthält die Verzeichnisliste die normalen - und -Tags, die jede HTML-Seite beginnen sollten. Sie sollten es nur deaktivieren, wenn Sie Ihre eigenen Kopf- und Fußzeilendateien bereitstellen.
- Letzte Änderungszeiten anzeigen Wenn aktiviert, enthält die Verzeichnisliste das Datum der letzten Änderung für jede Datei.
- Dateigrößen anzeigen Wenn aktiviert, enthält die Auflistung die Größe jeder Datei.
- Icon in Link einfügen Wenn diese Option aktiviert ist, ist das Symbol in der Auflistung ein Link zur Datei selbst. Ansonsten ist nur der Dateiname ein Link.
- Dateinamenbreite Diese Option steuert die Länge der Dateinamenspalte in der Verzeichnisliste. Sie können entweder eine Anzahl von Zeichen oder * eingeben, um die Spalte auf die Länge des längsten Dateinamens zu skalieren.
- Beschreibungsbreite Diese Option steuert die Länge der Beschreibungsspalte in der Verzeichnisliste, falls vorhanden. Sie können entweder eine Anzahl von Zeichen oder * eingeben, um die Spalte an die Länge der längsten Beschreibung anzupassen.
- Verzeichnisse zuerst anzeigen Wenn diese Option aktiviert ist, zeigt die Auflistung alle Verzeichnisse über allen Dateien, unabhängig von anderen Dateien. Die verfügbaren Optionen hängen von der Apache-Version ab, die Sie auf Ihrem System installiert haben. Die oben aufgeführten gelten für Version 1.3.19, aber wenn Sie eine neuere Version haben, sind möglicherweise mehr Optionen verfügbar.
- Wenn Sie möchten, dass Apache eine andere Datei als die Standarddatei (normalerweise index.html) zurückgibt, wenn ein Browser das Verzeichnis anfordert, geben Sie eine Liste von Dateinamen in die Verzeichnis-Indexdateien ein Feld. Es können mehrere eingegeben werden, und das erste, das gefunden wird, wird verwendet. Wenn keine der Indexdateien gefunden wird, wird stattdessen eine Verzeichnisliste mit den in Schritt 3 ausgewählten Optionen an den Browser zurückgegeben.
- Damit der Webserver bestimmte Dateien beim Generieren der Dateiliste im Verzeichnis ignoriert, geben Sie deren Dateinamen in den Zu ignorierende Dateien im Verzeichnisindex ein Feld. Sie können in den regulären Ausdrücken Shell-Platzhalter verwenden, z. B. *.doc .
- Um eine HTML-Datei am Anfang der Verzeichnisliste einzufügen, geben Sie ihren Dateinamen (relativ zum Verzeichnis) in die Verzeichnis-Index-Header-Datei ein Feld.
- Um eine Datei am Ende der Verzeichnisliste hinzuzufügen, geben Sie sie in die Verzeichnisindex-Fußzeilendatei ein Feld.
- Um die Standardreihenfolge des Verzeichnisses zu steuern, deaktivieren Sie Standard im Verzeichnisindex sortieren nach Feld und wählen Sie aus den beiden Menüs daneben eine Reihenfolge und eine Spalte aus, nach der sortiert werden soll.
- Sie können Beschreibungen für Dateien festlegen, indem Sie die Tabelle *Verzeichnisindex-Beschreibungen* ausfüllen. Geben Sie in der leeren Zeile der Tabelle unter Beschreibung eine kurze Beschreibung der Datei ein Spalte und eine Liste von Dateinamen oder Platzhalternamen in der Dateinamen Säule. Da jeweils nur eine leere Zeile angezeigt wird, müssen Sie diese Seite erneut aufrufen, nachdem Sie jede Beschreibung hinzugefügt haben, wenn Sie mehr als eine eingeben möchten.
- Klicken Sie abschließend auf Speichern Schaltfläche unten auf der Seite, um Ihre Änderungen zu speichern und zur Seite mit den Verzeichnisoptionen zurückzukehren. Um sie zu aktivieren, klicken Sie auf Änderungen übernehmen irgendwo im Apache-Modul verlinken.
Die meisten dieser Optionen können für einen gesamten virtuellen Server festgelegt werden, indem Sie auf der Optionsseite des virtuellen Servers auf das Symbol für die Verzeichnisindizierung klicken. In diesem Fall gelten sie für alle vom virtuellen Host angeforderten Dateien, sofern sie nicht durch Optionen für ein Verzeichnis oder einen URL-Speicherort überschrieben werden.
Auf der Seite mit den Verzeichnisoptionen gibt es viele weitere Symbole, auf die Sie klicken können, um Optionen festzulegen, die nur für dieses Verzeichnis, diesen URL-Pfad oder Dateinamen gelten. Einige davon werden später in diesem Kapitel in anderen Abschnitten erklärt, wie z. B. Aliase und Weiterleitungen und *Passwort zum Schutz eines Verzeichnisses*.
Sie können das Verzeichnis, die Dateinamen oder den URL-Speicherort ändern, für den die Einstellungen gelten, indem Sie die Optionen gelten für verwenden unten auf der Seite mit den Verzeichnisoptionen. Es hat genau die gleichen Felder wie das am Anfang dieses Abschnitts beschriebene Erstellungsformular. Wenn Sie Änderungen vornehmen, klicken Sie auf Speichern button to update the Apache configuration and then the Apply Changes link to make them active. Or to remove the directory configuration and all its options, click on Delete instead.
Creating aliases and redirects
Normally, there is a direct relationship between the path in URL and the file that is returned by the webserver. For example, if a browser requests http://www.example.com/images/foo.gifand the document root for www.example.com is /home/example/www , then the file /home/example/www/images/foo.gif would be read by the webserver and returned to the client.
This can be changed though by using what Apache calls aliases. An alias maps a particular URL path to a file or directory, which does not necessarily have to be under the document root. So in the example above, the /images URL path might actually be aliases to the directory /www/images , which would cause the file /www/images/foo.gif to be read instead.
Aliases can be defined globally or in a virtual server. To create one, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the alias under. If you want it to apply to all virtual servers (or you don't have any), click on the *Default Server *icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon. This will take you to the page in the screenshot below.
- Fill in the empty row in the Document directory aliases table with the URL path (under From ) and the file or directory that it should map to (under To ). If you are editing the default server, there may already be several entries in this table that are part of the standard Apache configuration. There will always be exactly one empty row in the table. If you need to add more than one alias, you will need to re-visit this page after filling in the row and saving.
- Klicken Sie auf Speichern button to have your new alias stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the alias active, click on the Apply Changes link at the top of the page.
The aliases and redirects form
Existing aliases can be editing by just changing the entries in the Document directory aliases table and then clicking Save . You should not change the alias for /icons in the default server though, as this is used by Apache when it generates icons for directory listings. If you want to delete an alias, just delete the contents of both its fields in the table.
Aliases can also be created that use Perl regular expressions to match more complex URL paths. These must be entered into the Regexp document directory aliases table on the Aliases and Redirects form, which has the same columns as the *Document directory aliases* table described above. The difference is that any regular expression can be entered into the From field, such as ^/images/(.*)\.gif$ . The To field can taken a string that refers to bracketed sections in the expression, such as /images/$1.jpg . This would convert any request for a GIF file into one for the JPEG with the same name.
Redirects are similar to aliases, but have a different purpose and work in a different way. Whenever a client requests a URL path that has been redirected, Apache will tell it to go to another URL (possibly on another server) instead. For example, you might redirect all requests to http://www.example.com/webmin/ to ''http://www.webmin.com/''. Unlike the way aliases behave, if a browser requests a page like /webmin/foo.gif it will not be redirected to ''http://www.webmin.com/foo.gif'' - it will just go to the URL ''http://www.webmin.com/'' instead.
Redirects are implemented by the webserver sending the special 302 status code to the browser, which tells it to go to a new location. It is quite possible for the new URL to be a redirect itself, and you can even create a loop of redirects - not that this is a good idea.
To set up redirection for a path on your server, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the redirect under. If you want it to apply to all virtual servers, click on the *Default Server *icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon to go to the page in Figure 29-6.
- In the empty row of the *URL redirects *table, enter the URL path on your server under the From column, such as /webmin . Under the To column, enter the URL that requests should be redirected to, such as http://www.webmin.com/ . The Status field is optional, but can be filled in if you want to change the HTTP status code that will be used for this redirect. The default is 302, which indicates a temporary redirection. However, you can 301 to tell browsers that the direction is permanent, or 303 to tell them that the original content has been replaced. There will always be exactly one empty row in the table. If you need to add more than one redirect, you will need to re-visit this page after filling in the row and saving.
- Klicken Sie auf Speichern button to have your new redirect stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the redirection active, click on the Apply Changes link at the top of the page.
As with aliases, existing redirects can be edited by just changing the entries in the URL redirects table and then clicking Save . To delete a redirect, just delete the contents of all of its fields in the table.
You can also create regular expression redirects that behave in a similar way to regexp aliases, using the Regexp URL redirects table on the same page. Under the From column you can enter a URL path expression such as ^/webmin/(.*)$ , and under the To column a URL that can refer to bracketed parts of the path, such as http://www.webmin.com/$1 . In this example, an request by a client for a page under /webmin would be redirected to the same file at www.webmin.com .
Also on the Aliases and Redirects page are two more tables labelled Permanent URL redirects and Temporary URL redirects . The first behaves exactly the same as a normal redirection, but with the status code always set to 301, indicating a permanent redirection. The second also behaves like a normal redirect, but always uses a status code of 302 (temporary redirection). This option is really quite useless, as normal redirections default to using status 302 if one is not specified.
Redirects can also be defined in the options for directories, URL locations, filenames and .htaccess files. When editing the options for one of these (described in the *Setting per-directory options* section), the exact same icon and table are available as when setting up aliases for a virtual server. Naturally, a redirect in a directory only makes sense if the URL path being redirected actually refers to that some file or sub-directory that it contains. The same goes for redirects in URL locations - the path being redirected must start with the location's path.
If Apache on your system has been compiled with or dynamically loads the proxy module (covered in the *Configuring Apache as a proxy server* section below), tables labelled *Map locale to remote URLs* and Map remote Location:headers to local will appear on the Aliases and Redirects form under the virtual server options page. These allow you to specify a URL path that when requested will cause Apache to itself request pages from another website and return them to the browser. Even though the URL that the user is accessing is on your server and their browser is connecting only to your system, the content is actually being loaded from elsewhere.
To set up this URL mapping, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to create the mapping under. If you want it to apply to all virtual servers, click on the *Default Server* icon instead.
- On the virtual server options page that appears, click on the Aliases and Redirects icon to go to the page in Figure 29-6.
- In the empty row in the Map locale to remote URLs table, enter a URL path on your server (like /webmin ) into the first field, and the full URL that you want the pages to be requested from into the second (like http://www.webmin.com/ ).
- In the empty row in the Map remote Location:headers to local table, enter the same full remote URL into the first field and the URL path on your server into the second. This second table controls the conversion of redirects issued by the remote server, and should almost always be set. If it is not set, whenever the remote server issues a redirect the browser will end up connecting directly to it instead of to your server.
- Klicken Sie auf Speichern button to have your new mapping stored in the Apache configuration. The browser will return to the virtual server options page.
- To make the mapping active, click on the Apply Changes link at the top of the page.
You can test it out by going to the mapped URL path on your system, and you should see pages that have been requested from the remote server. The process is not totally transparent though, because it does not convert HTML files in any way. So if in the example above the remote server contained an HTML page with a link like , following it would take the browser to /foo.html on your system, not /webmin/foo.html as you might expect. There is no solution to this problem, apart from making sure that the remote server always uses relative links and image paths.
Running CGI programs
CGI stands for Common Gateway Interface, and is a standard method for webservers to run external programs, pass them details of a browser's request, and read back any content that the program generates. CGI programs are one of the simplest way of adding dynamic pages to your webserver, and are relatively easy to set up and develop. Server-side includes (covered in the next section) are even simpler, but very limited in what they can do.
A CGI program can be written in any language as long as it follows certain rules. The most common is Perl, but C, Python, PHP or any other language that can access environment variables and produce output can be used. You can even write shell scripts that are valid CGI programs. This section is not going to explain the details of how to write them though - there are plenty of books that cover that already.
CGI programs are just files on your system, like any other HTML or image file. The difference is that when they are requested by a browser, Apache executes them and returns their output instead of the contents of the file. Because you only want this to happen for programs and not for HTML files, the server must be configured to identify certain files as CGI programs. This is normally done in one of two ways - by putting all CGI programs into a certain directory, or by giving them all a file extension like .cgi.
The choice is yours, but the latter option is simpler to use as you can freely mix CGI scripts, HTML and image files in the same directory. To set it up, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to set up CGI programs for. Or click on the *Default Server *icon if you want to use them on all servers.
- Click on the icon for the directory that you want CGI programs to be enabled under. Typically each virtual server will have an icon for options for its document root directory, but if not you can create one by following the steps in the *Setting per-directory options* section above. If you only want to allow CGI programs to be run in some sub-directory of the website, you can create a new directory icon for that as well.
- On the directory options page, click on the Document Options icon and change the Directory options field from Default to Selected below . Then set the rows Execute CGI programs and Generate directory indexes auf Ja , and click the Save Schaltfläche unten auf der Seite. This tells Apache that CGI programs can be executed in the directory.
- Back on the directory options page, click on the MIME Types icon. In the Content handlers table, select cgi-script from the first blank menu under the Handler column, and enter .cgi into the field next to it under the Extensions Säule. Then click the Save button at the end of the form. This tells Apache to treat all files in the directory ending in .cgi as CGI programs.
- Finally, click the Apply Changes link on any page. You should now be able to create a file with a .cgi extension in the chosen directory, and test it out in a web browser.
An alternative to this approach is to specify a directory in which all files are treated as CGI programs. This has the advantage that they can be given any name you like, instead of being forced to have a .cgi extension. You can also set permissions on this directory to restrict who is allowed to create CGI programs, while still allowing others to edit normal HTML pages.
To set up a directory for CGI scripts, the steps to follow are :
- On the module's main page, click on the icon for the virtual server that you want to set up a CGI directory for. Or click on the *Default Server* icon if you want to set it up for all servers.
- Click on the CGI Programs icon to bring up a page for setting various CGI options.
- The CGI directory aliases table works in a very similar to the Document directory aliases table described in the previous section. However, in addition to mapping a URL path to a directory on your server it also tells Apache that any files accessed through that path should be treated as CGI programs. In the first empty row of the table, enter a URL path like /cgi-bin/ into the From field and a directory like /home/example/cgi-bin/ into the To Feld.
- Klicken Sie auf Speichern button at the bottom of the page to return to the virtual server options page. Then click the Apply Changes link to make the CGI directory active.
You should now be able to create CGI programs in the directory, and test them out in a web browser. On some Linux distributions, the default Apache configuration will already have a CGI directory available at the URL path /cgi-bin/, mapped to a directory like /home/httpd/cgi-bin/. If this is good enough for you, there is no need to follow the steps above - instead, you can just put CGI programs in that directory.
Normally, all CGI programs execute as the Unix user that the webserver runs as, typically named httpd or apache. On a system with multiple users who cannot be fully trusted, this is not a good thing - anything that one user's CGI program can do, everyone else's can as well. So for example if a user writes a CGI program that edits some file, he would have to make that file writeable by the httpd user, meaning that everyone else's CGI programs could write to it as well.
Fortunately, there is a solution. Apache comes with an optional program called suexec that can be used to have CGI programs run as some other Unix user, rather than as the webserver user. Typically the CGI programs under each virtual server will be run as the Unix user who owns that server's files. To set this up, the steps to follow are :
- Make sure that the suexec program exists on your system, and that it has setuid-root permissions. Apache typically expects to find it in /usr/sbin or /usr/local/apache/sbin, and most Linux distributions include it as a standard part of their Apache package. However, some do not have it setuid by default, so you may need to run chmod 6711 /usr/sbin/suexec to make it so.
- On the main page of the module, click on the icon for the virtual server that you want to have CGI programs run as a different user on. This will take you to the options page shown in Figure 29-4.
- Click on the User and Group icon on the virtual server options page.
- For the Run as Unix user field, select User name and enter the name of the user who owns the virtual server into the field next to it.
- Similarly, for Run as Unix group select Group name and enter the primary group of the user specified in the previous step.
- Klicken Sie auf Speichern button to return to the options page for the virtual server.
- To activate suexec for the first time, you need to stop and re-start Apache. Use the Stop Apache link at the top of the page to halt it, and then the Start Apache link to start it up again.
- To check that suexec is actually working, check the Apache error log file for a line containing suEXEC mechanism enabled that was logged when the webserver was re-started.
Because it can execute commands as any user on your system, suexec has many security restrictions to prevent misuse by normal users. It will only run CGI programs that are owned by the user and group specified in steps 4 and 5, and only if they are not writeable by any other user, or in a directory that is writeable by another user. The IDs of the user and group must be above minimums that are compiled into the program, to prevent programs owned by system users such as root or bin from being run. Finally, the program must reside under a directory that is compiled into suexec, and nowhere else on the filesystem.
This last restriction can be very annoying if you have a large number of virtual servers and want to enable the execution of CGI programs in their directories. The default allowed directory is typically the standard CGI directory for Apache, such as /home/httpd/cgi-bin. To change this, you will need to re-compile suexec with a different directory, such as /home.
Whenever suexec fails to run a CGI program, it fails with HTTP status code 500. Because there are many things that can go wrong, you should check the file suexec_log in the same directory as the other Apache logfiles to see why it is refusing to execute a particular program. For each failure, a line is written to this file explaining the problem, such as incorrect permissions or a file ownership mismatch.
Writing CGI programs can be difficult because when they fail, very little information is displayed in the browser. All you see is a message like 500 server error , which no explanation of the real cause. However, more detailed error information is written to the Apache error log file. This is usually named error_log, and can be found in the same directory as the Apache access log files. See the section below on Configuring logging for more details on how to find and change it.
Anything that a CGI programs outputs to STDERR will also be written to the error log, which is useful if you want your program to generate debugging information that is not sent to the web browser. Because many programming languages like Perl output error messages on STDERR if a script fails to compile or run, all such messages will also be written to the error log file.
The biggest problem with CGI programs is that the webserver has to launch a new process every time one is requested. If the CGI is written in Perl or PHP, the process then has to load the interpreter for that language which can itself be a large program. The end result is that processing a request for a CGI page takes much longer than a request for a static HTML or image file, and generates much more load on the server system.
For this reason, optional modules have been developed that allow the webserver to run Perl and PHP scripts using an interpreter that is part of the Apache process. These modules are called mod_perl and mod_php, and are included in the Apache package in many Linux distributions. Installing and configuring them is not covered in this chapter though.
Setting up server-side includes
Server-side includes allow you to create simple dynamic web pages without the complexity of writing an entire CGI program in a language like Perl. When active, some of the HTML files served by Apache are checked for special tags starting with appears in the HTML of page, it is replaced with the contents of the file something.html .
Server-side includes can also be used to access and set environment variables, to conditionally display HTML based on variables and to run CGI programs or shell commands and have their output included in the page. This section will not cover the tags that are available and the purposes though - instead, you should read the documentation on the Apache website or a good book on HTML.
Normally, allowing un-trusted users to create HTML pages containing server-side include tags is perfectly safe because they cannot be used to perform potentially dangerous operations like editing files on the server. The exception to this is the tag, which can be used to run an arbitrary shell command and have its output included in the web page. Because the command runs as the Unix user that Apache is running as (normally httpd), a user who is not allowed to create CGI programs may be able use this kind of tag to read or modify files that he would not normally be able to. For this reason, Apache can be configured to enable server-side includes with or without the risky exec tag.
Because checking an HTML file for server-side include tags is CPU intensive, they are often only activated for files with the .shtml extension. This way you can put static HTML in .html files and dynamic content into .shtml files, so that the server does not have to waste time looking for tags in files that do not contain them. However, it is also quite possible to have all .html files checked for server-side includes if you wish.
To turn on includes for a virtual server, the steps to follow are:
- On the module's main page, click on the icon of the virtual server that you want to enable server-side includes on. Or click on the Default Server icon to enable them for all virtual hosts.
- Click on the icon for the directory that you want server-side includes to be enabled under. Typically each virtual server will have an icon for options for its document root directory, but if not you can create one by following the steps in the *Setting per-directory options* section above. If you only want to enable server-side includes in some sub-directory of the website, you can create a new directory icon for that as well.
- On the directory options page, click on the Document Options icon and change the Directory options field from Default to Selected below . If you want to enable server-side includes without the exec tag, change the Server-side includes row to Yes . If you want to enable the potentially risky exec tag as well, change Server-side includes and execs row to Yes stattdessen. Either way, when they have been enabled click the Save Schaltfläche unten auf der Seite.
- Click on the MIME types icon on the directory options page. If you want to enable includes on all HTML files, find the *Content handlers* table to select server-parsed from the first empty menu under the Handler column, and enter .html into the field next to it under the Extensions Säule. This tells Apache that files ending in .html should be checked for server-side include tags. If you want to enable includes for only .shtml files, enter .shtml instead of .html under the Extensions Säule. Then in the Extra MIME types table enter text/plain into the first empty field under the Type column and .shtml into the field under Extensions next to it. This tells Apache that .shtml files should be checked for server-side include tags, and that they actually contain HTML.
- Finally, click the Save button at the bottom of the MIME Types page, and then the Apply Changes link back on the directory options page.
Once server-side includes are enabled, you can test them by creating an .html or .shtml file in the chosen directory with some special tags it in. Then open the page in your web browser to see the result. If for some reason server-side includes were not enabled properly, nothing will show up at all because the