HOME

Wiki: Linux Programme: Apache(http-Server)

Bevor ein http-Server auf einem.. Server installiert wird sollte man sich Gedanken über die Sicherheit machen:
www.digitalocean(initial server setup DEBIAN10)

Apache stellt einen http-Server bereit.
Es ist in den allgemeinen Paketquellen vorhanden und kann leicht installiert werden:
# apt-get install apache2

BEVOR die Firewall für den http-Server(apache2) geöffnet wird.. sollte die "verräterische" Datei unter /var/www/html/index.html umbenannt oder entfernt werden.
Anderenfalls gibt die unfreiwillig Informationen für Angreifer raus..
Dazu noch die Firewall für http(Port80) öffnen:
# ufw allow WWW

Zur Kontrolle eine Statusabfrage der UFW:
# ufw status

Prüfung ob apache läuft:
# systemctl status apache2

Apache starten, stoppen, restarten..
# systemctl start apache2
# systemctl stop apache2
# systemctl restart apache2

Nach Konfigurationsänderungen.. diese übernehmen(ohne Neustart)
# systemctl reload apache2

Apache beim Booten automatisch starten:
# systemctl enable apache2

Apache beim Booten NICHT automatisch starten:
# systemctl disable apache2

Virtuelle Hosts

In der Defaulteinstellung erwartet Apache unter /var/www/html die zu veröffentlichen Internetdateien.

Mit wenigen Änderungen kann man weitere "sub"-Domains anlegen, wobei die /var/www/html/index.html als DEFAULT Anlaufstelle belassen wird.
Wer die "sub"-Domainnamen kennt kann diese dann gezielt ansteuern.

Als Beispiel sei hier eine "wiki" Verzweigung angelegt werden, dazu /var/www/wiki hinzufügen:
# mkdir -p /var/www/wiki

Und die Rechte für den User http-server korrekt setzen:
# chown -R http-server:http-server /var/www/wiki
# chmod -R 755 /var/www/wiki

Als User http-sererv die Datei /var/www/wiki/index.html erstellen:
$ touch /var/www/wiki/index.html

Und mit beliebigen Text füllen: ERFOLG

Eine neue Konfigurationsdatei /etc/apache2/sites-available/ erstellen:
# touch /etc/apache2/sites-available/wiki.conf
Dort hineinschreiben:
<VirtualHost *:80>
 DocumentRoot /var/www/wiki
 ServerAlias wiki.dhlf.de
 ServerName wiki.dhlf.de
 ServerAdmin webmaster@localhost
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Die Konfigurationsdatei ist erstellt, nun muss sie auch noch aktiviert werden:
# a2ensite wiki.conf

Prüfen ob die Werte so von Apache auch verstanden wurden:
# apache2ctl configtest

Wenn es keine Fehler gab diese Änderungen übernehmen und Apache neustarten:
# systemctl restart apache2

Nun kann man die entweder die DEFAULT Seite mit http://dhlf.de aufrufen oder die "wiki"-Seite mit http://wiki.dhlf.de.
Wer Quatsch eingibt(z.B. hallelulja.dhlf.de) sollte dann auch auf der DEFAULT-Seite landen.

Um bei fehlendem index.html den Zugriff auf alle vorhandenen(und sonst nicht verlinkten) Dateien zu verhindern
/etc/apache2/apache2.conf anpassen:
Unter Directory /var/www bei Options ein MINUS vor Indexes und ein Plus vor allen anderen setzen.
Apache weigert sich zu starten, wenn EIN Plus/Minus-Zeichen gesetzt wurde(und bei anderen Optionen in der selben Zeile nicht!!)
# systemctl restart apache2 (um die Änderungen zu aktivieren)
# systemctl status apache2.service (um eventuelle Fehler einzugrenzen)

Server Side Includes

Normalerweise werden die Internetseiten statisch erstellt bleiben also so wie sie(einst) erstellt wurden.
Möchte man aber z.B. das Datum der letzten Änderung am Ende der Seite anzeigen lassen.. müsste man die ja immer manuell eintippen.
Etwas.. unsinnig.

Eine Idee wäre einmal alle fünf Minuten mit einem Skript alle! Seiten nacheinander abändern zu lassen. Somit wäre die Uhrzeit nicht mal minutengenau aber immerhin..
Dazu müsste erst jeder Ordnerinhalt ausgelesen werden, die AKTUELLEN Dateiänderungsdaten gesichert, dann die Dateien abgeändert und die vorherige Änderungszeit wieder zurückgeschrieben werden.
Machbar ohne Aktivierung von PHP/SSI. Interessant aber vom Aufwand her.. irgendwie blöde.

Es gibt spezielle Skript-Sprachen wie php(und Ähnliche). Leider gibt es immer wieder Angriffe gegen Sicherheitslücken, die diese Sprachen betreffen.
SSI sind sehr eingeschränkt in der Nutzung(im Vergleich zu php/etc.) der eingebetteten Befehle die zur "Laufzeit" ausgeführt werden, also jedes Mal wenn die Seite abgerufen wird.
Ein "Standardbeispiel" zur Anzeige:
<!--#echo var="DATE_LOCAL" -->
Wobei die Darstellung eher an einen kryptischen Kommentar erinnert, aber überraschenderweise das aktuelle Datum(während des Abrufens der Seite) anzeigt.
OHNE aktiviertes SSI wird der Befehl als Kommentar einfach ignoriert, es wird NICHTS ausgegeben.

Der Server würde Befehlen entweder in Dateien mit einer speziellen Dateiendung oder anhand des execute-Flags der Dateien suchen und abarbeiten. Alle anderen Dateien werden NICHT durchsucht.
Dies kann bei sehr vielen Dateien(mit diesen speziellen Kennungen) zu einer verlangsamten Ausgabe führen, dürfte bei KLEINEN Projekten aber vernachlässigbar sein.

Um SSI zu aktivieren muss man Apache das entsprechende Modul hinzufügen:
Im Gegensatz zu Informationen aus dem Internet ist das Modul includes eben NICHT automatisch aktiviert.
Ein Blick in /etc/apache2/mod-available zeigt include.load existiert, aber in /etc/apache2/mod-enabled fehlt der Link!
Das Modul endlich AKTIVIEREN(erstellt einen symbolischen Link in /etc/apache2/mod-enabled):
# a2enmod include
Und den Server neustarten:
# systemctl restart apache2

Um das rückgängig zu machen:
# a2dismod include
Und den Server neustarten:
# systemctl restart apache2

Mögliche verwendbare Module anzeigen:
# ls -l /etc/apache2/mods-available/

Alle momentan aktiven Module anzeigen:
# apachectl -M

Den aktivierten mod "Includes" für ALLE unter /var/www liegende Dateien aktivieren:
Konfigurationsdatei /etc/apache2/apache2.conf unter Abschnitt des KORREKTEN Ordners die Options um Includes erweitern:
<Directory /var/www/>
 Options -Indexes +Includes +FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>

Apache angeben, WELCHE Dateien denn nun "geparst" werden sollen:
Konfigurationsdatei /etc/apache2/apache2.conf unter Abschnitt des KORREKTEN Ordners die Zeile AddHandler server-parsed shtml hinzufügen:
<Directory /var/www/>
 Options -Indexes +Includes +FollowSymLinks
 AddHandler server-parsed shtml
 AllowOverride None
 Require all granted
</Directory>

Ab jetzt werden alle *.shtml Dateien im Ordner /var/www auf SSI-Befehle gescannt und gegebenenfalls ausgeführt.
Soll das Rückgängig gemacht werden reicht es NICHT aus den Eintrag zu entfernen und den Server neuzustarten!
In /etc/apache2/mods-available/mime.conf nach .shtml suchen und den entsprechenden Block mit # deaktivieren.
Und den Server neu starten:
# systemctl restart apache2
Falls man dies NICHT macht bleibt der Eintrag für shtml weiterhin im System!!

Sinnvolle Anwendungen für SSI

Ein WESENTLICHER Vorteil von SSI besteht darin, Teile von Internetseiten ersetzen zu können.
Nicht nur ein langweiliges "Zuletzt geändert am... " was allen Besuchern zeigt wie verstaubt die Seite ist,
auch für den Kopf oder "Schwanz" der Seite können Teile verlinkt werden.
Denke man nur an eine verlinkende Liste am "Kopf" einer jeder Seite. Man müsste JEDE Seite anpassen, wenn sich hier was ändert.
Nein, muss man eben nicht. Naja, schon aber pro "Ebene" nur einmal.
Durch die zentralge Vorgabe jeder Ebene braucht man nur diese ändern und verlinkt dann auf alle anderen Dateien.

Das funktioniert folgendermassen:
Erzeugen eines Ordners mit dem klangvollen Namen ssi(als der http-server User):
$ mkdir -p /var/www/wiki/ssi

Eine leere Datei mit dem Namen footer erstellen(je nach Wahl Endung: .html oder .shtml ODER +exec-flag):
$ touch /var/www/wiki/footer.html

Die Datei füllen mit(Zeitformat auf deutsch; Ausgabe des heutigen Datums):
FOOTER-TEST<br>
<!--#config timefmt="%d.%m.%Y, %H.%M" -->
<!--#echo var="LAST_MODIFIED" -->
Interessanterweise wirkt die Auswertung von LAST_MODIFIED nicht auf das Datum der Änderung der footer.html sondern der aufrufenden Seite!

Nun kann man aus einer anderen .html Datei diesen "footer.html" einbinden durch:
<!--#include virtual="/ssi/footer.html" -->
Wenn gar nichts ausgegeben wurde.. ist INCLUDE gar nicht richtig eingestellt.
Wenn nur Letzte Änderung erscheint funktioniert include, aber die "footer.html" Datei wurde selber nicht "gescannt" und somit das Datum nicht ausgegeben.
Möglicherweise erscheint auch der Hinweis:
[an error occurred while processing this directive]
Dann ist die Datei "footer.html" nicht aufzufinden weil der Dateiname/Pfad nicht stimmt.


Diese Seite wurde zuletzt am 26.07.2020 um 15:05 geändert.

(c) 2024 DHLF ☮🇺🇦