Inhaltsverzeichnis
Apache HTTP Server ArchLinux
Der Apache HTTP Server ist ein Open Source Webserver und der seit 1996 am meisten im Internet eingesetzte Webserver weltweit. Der freie und quell offenen Webserver wird von der Apache Software Foundation zur Verfügung gestellt und weiterentwickelt.
Beschreibung | Externer Link |
---|---|
Homepage | https://httpd.apache.org/ |
Dokumentation | https://httpd.apache.org/docs/ |
ArchWiki | https://wiki.archlinux.org/title/Apache_HTTP_Server |
* Quellen: Buch: Sascha Kersken - Apache 2.4 Das umfassende Handbuch
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Installation
Zur Installation des Apache HTTP Servers wird nachfolgendes Paket benötigt:
Mit nachfolgendem Befehl, wird das Pakete apache
installiert:
# pacman -S --noconfirm apache
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket apache
installiert wurden:
# pacman -Qil apache
Dienst/Daemon-Start einrichten
Um einen Apache HTTP Server, welcher als Dienst/Daemon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
systemctl enable httpd.service Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Eine Überprüfung, ob beim Neustart des Server der httpd
-Dienst/Daemon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e httpd.service httpd.service enabled disabled
bzw.
# systemctl is-enabled httpd.service enabled
iptables/ip6tables Regeln
Damit der Apache HTTP Server auch erreichbar ist und nicht die Webseiten-Anfragen vom Paketfilter iptables
blockiert werden, müssen nachfolgende Regeln zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 1169 2101K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 5 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-INP Defend " 6 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 7 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 8 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 917 packets, 84944 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT # iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 1202 2103K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 7 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 5 prefix "REC-INP Defend " 8 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset 9 0 0 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 10 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 7 packets, 936 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 (INPUT) und Position 6 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/iptables/iptables.rules
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/iptables/iptables.rules # Generated by iptables-save v1.8.7 on Wed Mar 31 10:13:23 2022 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [13:3332] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5 -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -j REJECT --reject-with icmp-proto-unreachable COMMIT # Completed on Wed Mar 31 10:13:23 2022 # Generated by iptables-save v1.8.7 on Wed Mar 31 10:13:23 2022 *nat :PREROUTING ACCEPT [5:352] :INPUT ACCEPT [1:60] :OUTPUT ACCEPT [8:577] :POSTROUTING ACCEPT [8:577] COMMIT # Completed on Wed Mar 31 10:13:23 2022 # Generated by iptables-save v1.8.7 on Wed Mar 31 10:13:23 2022 *mangle :PREROUTING ACCEPT [1216:2104461] :INPUT ACCEPT [1212:2104169] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [944:91396] :POSTROUTING ACCEPT [944:91396] COMMIT # Completed on Wed Mar 31 10:13:23 2022
Um die aktuellen ip6tables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# ip6tables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp * * ::/0 ::/0 3 0 0 ACCEPT all lo * ::/0 ::/0 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 5 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-INP Defend " 6 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 7 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 8 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 3 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 4 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende ip6tables
-Regeln dem ip6tables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
und hier die Befehle:
# ip6tables -I INPUT 5 -p tcp --dport 80 -j ACCEPT # ip6tables -I INPUT 6 -p tcp --dport 443 -j ACCEPT
Ein erneute Abfrage des ip6tables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# ip6tables -nvL --line-numbers Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all * * ::/0 ::/0 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT icmp * * ::/0 ::/0 3 0 0 ACCEPT all lo * ::/0 ::/0 4 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22 5 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80 6 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:443 7 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-INP Defend " 8 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 9 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 10 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all * * ::/0 ::/0 LOG flags 0 level 5 prefix "REC-FWD Defend " 2 0 0 REJECT tcp * * ::/0 ::/0 reject-with tcp-reset 3 0 0 REJECT udp * * ::/0 ::/0 reject-with icmp6-port-unreachable 4 0 0 REJECT all * * ::/0 ::/0 reject-with icmp6-addr-unreachable Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 (INPUT) und Postition 6 (INTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80 6 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:443 ...
Um diese ip6tables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/ip6tables-save > /etc/iptables/ip6tables.rules
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das ip6tables
-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/iptables/ip6tables.rules # Generated by ip6tables-save v1.8.7 on Wed Mar 31 10:15:10 2022 *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Wed Mar 31 10:15:10 2022 # Generated by ip6tables-save v1.8.7 on Wed Mar 31 10:15:10 2022 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5 -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable -A INPUT -j REJECT --reject-with icmp6-addr-unreachable -A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5 -A FORWARD -p tcp -j REJECT --reject-with tcp-reset -A FORWARD -p udp -j REJECT --reject-with icmp6-port-unreachable -A FORWARD -j REJECT --reject-with icmp6-addr-unreachable COMMIT # Completed on Wed Mar 31 10:15:10 2022 # Generated by ip6tables-save v1.8.7 on Wed Mar 31 10:15:10 2022 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Wed Mar 31 10:15:10 2022
IPv4: Port Forwarding
Falls sich der Apache HTTP Server NICHT auf dem Server befinden sollte, welcher z.B. die offizielle IP-Adresse verwaltet und auf diesem Server, welche die offizielle IP-Adresse inne hat, kein Apache HTTP Server läuft, können auf z.B. Port 80 ankommende TCP/IP-Pakete mit Hilfe von iptables
-Regeln auf einen anderen Server umgeleitet werden.
Beispiel:
- Alle Anfragen kommen auf dem Server
192.168.0.1
auf Port 80 an - Alle Anfragen sollen auf den Server
192.168.0.90
auf Port 80 - weitergeleitet werden!
Nachfolgende Regel muss dazu auf dem Server, welche die IP-Adresse 192.168.0.1 inne hat, zum iptables
-Regelwerk hinzugefügt werden. Das Ergänzen erfolgt in der iptables
-Kette:
nat
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -t nat -nvL --line-numbers Chain PREROUTING (policy ACCEPT 4 packets, 339 bytes) num pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 1 packets, 60 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 8 packets, 573 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 8 packets, 573 bytes) num pkts bytes target prot opt in out source destination
WICHTIG - Bei der MASQUERADE-Regel darf NICHT das Interface enthalten sein, an dessen geFORWARDED wird !!!
Nachfolgender Befehl, fügen folgende iptables
-Regel dem iptables
-Regelwerk hinzu, ohne das der Paketfilter angehalten werden muss:
-A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 80 -j DNAT --to-dest 192.168.0.90:80
und hier der Befehl:
# iptables -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 80 -j DNAT --to-dest 192.168.0.90:80
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -t nat -nvL --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.0.1 tcp dpt:80 to:192.168.0.90:80 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
WICHTIG - Bei der MASQUERADE-Regel darf NICHT das Interface enthalten sein, an dessen geFORWARDED wird !!!
Die neue Zeile ist an Position 1 (PREROUTING) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 1 0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.0.1 tcp dpt:80 to:192.168.0.90:80 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/sysconfig/iptables
/etc/hosts
Falls keine DNS-Auflösung des Namens möglich ist, muss in der Konfigurationsdatei
/etc/hosts
nachfolgende Ergänzung hinzugefügt werden:
127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost 192.168.0.30 apache.tachtler.net apache fe80::192.168:0:30 apache.tachtler.net apache
HINWEIS - Die Ergänzungen sind in der 3 Zeile und 4 Zeile in oben gezeigter Konfigurationsdatei!
Somit kann gewährleistet werden, dass die Verwendung des DNS-Namens möglich ist.
Erster Start
Bevor weitere Konfigurationsschritte erfolgen, sollte dem ersten Start nichts im Wege stehen, da bereits hier Konfigurationseinstellungen durchgeführt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl start httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Webserver Überprüfung
Ob der Apache HTTP Server, sprich der httpd
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden:
# systemctl status httpd.service ● httpd.service - Apache Web Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor pre> Active: active (running) since Thu 2022-03-31 10:31:49 CEST; 5s ago Main PID: 1240 (httpd) Tasks: 82 (limit: 2340) Memory: 6.2M CPU: 15ms CGroup: /system.slice/httpd.service ├─1240 /usr/bin/httpd -k start -DFOREGROUND ├─1241 /usr/bin/httpd -k start -DFOREGROUND ├─1242 /usr/bin/httpd -k start -DFOREGROUND └─1243 /usr/bin/httpd -k start -DFOREGROUND Mar 31 10:31:49 vml030 systemd[1]: Started Apache Web Server.
bzw.
# ps auxwf | grep httpd root 1328 0.0 0.1 6992 2584 pts/0 S+ 10:32 0:00 \_ grep httpd root 1240 0.0 0.3 8596 6232 ? Ss 10:31 0:00 /usr/bin/httpd -k start -DFOREGROUND http 1241 0.0 0.2 1212928 4132 ? Sl 10:31 0:00 \_ /usr/bin/httpd -k start -DFOREGROUND http 1242 0.0 0.2 1212928 4132 ? Sl 10:31 0:00 \_ /usr/bin/httpd -k start -DFOREGROUND http 1243 0.0 0.2 1212928 4132 ? Sl 10:31 0:00 \_ /usr/bin/httpd -k start -DFOREGROUND
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht der LOG-Dateien
/var/log/httpd/error_log
durchgeführt werden.
Ausgabe der LOG-Datei /var/log/httpd/error
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
[Thu Mar 31 10:31:49.143831 2022] [mpm_event:notice] [pid 1240:tid 139832443657152] AH00489: Apache/2.4.53 (Unix) configured -- resuming normal operations [Thu Mar 31 10:31:49.143895 2022] [core:notice] [pid 1240:tid 139832443657152] AH00094: Command line: '/usr/bin/httpd -D FOREGROUND'
Interface Überprüfung
Ob und an welchen Interface der Apache HTTP Server „lauscht“, bzw. Web-Anfragen beantwortet, kann mit nachfolgendem Befehl überprüft werden:
# ss -tulpen | grep httpd tcp LISTEN 0 511 *:80 *:* users:(("httpd",pid=1243,fd=4),("httpd",pid=1242,fd=4),("httpd",pid=1241,fd=4),("httpd",pid=1240,fd=4)) ino:22350 sk:7 cgroup:/system.slice/httpd.service v6only:0 <->
Erster Browser-Test
Wenn der Start des Apache HTTP Server erfolgreich durchgeführt wurde, kann die Abfrage mittels eines Browsers erfolgen, wie im nachfolgenden Bild dargestellt:
Konfigurationsdateien
Nachfolgende Aufstellung stellt die Konfigurationsdateien des Apache HTTP Server vor.
Verzeichnis | |
---|---|
Name | Beschreibung |
/etc/httpd/conf/ |
|
httpd.conf | Haupt- und Standardkonfigurationsdatei des Apache HTTP Server |
magic | Das Apache HTTP Server-Modul mod_mime_magic bestimmt den MIME-Typ von Dateien auf dieselbe Weise wie der Unix-Befehl file : Es werden dabei die ersten paar Bytes der Datei betrachtet. Es ist als „zweite Verteidigungslinie“ für Fälle gedacht, die mod_mime nicht auflösen kann ACHTUNG - Die Datei magic sollte nicht bearbeitet werden, da diese bei einem Upgrade des Apache HTTP Server überschrieben werden könnte bzw. würde |
mime.types | Medientypen-Konfigurationsdatei mit MIME-Dokumenttypen ACHTUNG - Die Datei mime.types sollte nicht bearbeitet werden, da diese bei einem Upgrade des Apache HTTP Server überschrieben werden könnte bzw. würde |
/etc/httpd/conf/extra/ |
|
httpd-autoindex.conf | Beinhaltet Optionen für automatisch generierte Verzeichnis-Indizes |
httpd-dav.conf | WebDAV-Einstellungen |
httpd-default.conf | Beinhaltet zusätzliche Einstellungen für den Hauptserver |
httpd-info.conf | Beinhaltet Einstellungen zu Statusmeldungen und Informationen des Servers, abrufbar unter speziellen URL-Ergänzungen /server-status und /server-info |
httpd-languages.conf | Einstellungen für die Zuordnung zwischen zusätzlichen Dateiendungen und Dokumentsprachen |
httpd-manual.conf | Einbindung der Apache HTTP Server-Dokumentation, abrufbar unter der URL-Ergänzung /manual |
httpd-mpm.conf | MPM-spezifische Einstellungen, die vor allem die Performance betreffen |
httpd-multilang-errordoc.conf | Beinhaltet Einstellungen für Mehrsprachige Fehlermeldungsseiten |
httpd-ssl.conf | Beinhaltet die Einstellungen zur SSL-Konfiguration |
httpd-userdir.conf | Beinhaltet die Einstellungen zur Veröffentlichung von benutzerdefinierter Web-Seiten unter dem z.B. HOME-Verzeichnis eines UNIX-Benutzers (~/user-URL-Pfade) |
httpd-vhosts.conf | Beinhaltet die Einstellungen für virtuelle Hosts |
proxy-html.conf | Beinhaltet Einstellungen für das Apache HTTP Server-Modul mod_proxy_html |
WICHTIG - Fett gedruckte Konfigurationsdateien sind standardmässig aktiv bzw. inkludiert!
HINWEIS - Die nachfolgenden Anpassungen sind individuell und vom jeweiligen Einsatzzweck abhängig und ggf. den persönlichen Bedürfnissen anzupassen!
Die nachfolgenden Anpassungen werden mit einem vorangestellten Kommentar in der Form
# Tachtler
gekennzeichnet.
Basis-Konfiguration
Nachfolgend sollen zuerst die Direktiven behandelt werden, welche für einen grundlegenden Betrieb eines Apache HTTP Server mit z.B. einer einfachen statischen Web-Seite wichtig sind. Es werden vorerst nur Konfigurationsanweisungen, welche mit dem Kern (core
) des Apache HTTP Server behandelt werden können, bzw. in MPM-Modulen oder solchen Apache HTTP Server-Modulen verankert sind, welche standardmässig mit dem Apache HTTP Server ausgeliefert und aktiviert sind.
Basis-Konfiguration: /etc/httpd/conf/httpd.conf
Verzeichnis/Name | Beschreibung |
---|---|
/etc/httpd/conf/httpd.conf | Haupt- und Standardkonfigurationsdatei des Apache HTTP Server |
Erklärungen:
LoadModule info_module modules/mod_info.so
Die Einbindung des Moduls mod_info
ist erforderlich, wenn über eine URL-Erweiterung Informationen über die Konfiguration des Apache HTTP Servers im HTML-Format angezeigt werden sollen.
Siehe auch nachfolgenden internen Link: Apache HTTP Server ArchLinux - info-Konfiguration
ServerAdmin webmaster@tachtler.net
E-Mail-Adresse des Apache HTTP Server-Administrators für automatisch generierte Fehlermeldungensseiten. Wenn der Apache HTTP Server bei der Beantwortung von Client-Anfragen auf Probleme stösst, wird eine angepasste Fehlermeldungsseite erzeugt, welche unter Umständen auch die zusätzliche Ausgabe eines Links mit der E-Mail-Adresse des Apache HTTP Server-Administrators enthalten kann.
Siehe auch nachfolgenden externen Link: ServerSignature
ServerName apache.tachtler.net:80
Hostname und TCP-Port des Apache HTTP Servers. Der hier angegeben Name dient ausschliesslich und nur der Selbstindentifikation des Apache HTTP Servers. Ob dieser auch für selbst referenzierende URLs benutzt werden soll, regelt nachfolgende Direktive:
Siehe nachfolgenden externen Link: UseCanonicalName
Options -Indexes +FollowSymLinks
Definiert, welche Eigenschaften oder Funktionen in einem bestimmten Verzeichnis verfügbar sind.
Options kann auf None
gesetzt werden, wobei dann keine der besonderen Eigenschaften verfügbar wäre, oder auf eines oder mehrere der nachfolgenden Tabelle:
Eigenschaft | Beschreibung |
---|---|
All | Alle Optionen außer MultiViews. Dies ist die Voreinstellung. |
ExecCGI | Die Ausführung von CGI-Skripten, welche mod_cgi verwenden, ist erlaubt. |
FollowSymLinks | Der Server folgt symbolischen Links in diesem Verzeichnis. Auch wenn der Server symbolischen Links folgt, bedeutet dies nicht, dass der zum Abgleich gegen <Directory> -Abschnitte verwendete Pfadname wechselt. Es ist auch zu beachten, dass diese Option innerhalb eines <Location> -Abschnitts ignoriert wird. |
Includes | Server Side Includes, die von mod_include bereitgestellt werden, sind erlaubt. |
IncludesNOEXEC | Server Side Includes sind erlaubt, #exec cmd und #exec cgi sind jedoch deaktiviert. Es ist aber noch möglich, CGI-Skripte aus ScriptAlias-Verzeichnissen mittels #include virtual einzubinden. |
Indexes | Wenn eine URL, die auf ein Verzeichnis zeigt, in dem sich keine durch DirectoryIndex definierte Indexdatei (z.B. index.html) befindet, dann liefert mod_autoindex eine formatierte Auflistung des Verzeichnisses zurück. |
MultiViews | „MultiViews“ sind bei der Verwendung von mod_negotiation erlaubt (siehe Content-Negotiation). |
SymLinksIfOwnerMatch | Der Server folgt nur symbolischen Links, bei denen die Zieldatei bzw. das Zielverzeichnis der gleichen Benutzerkennung gehört, wie der Link. |
ACHTUNG - Die Vermischung von Optionen mit + oder - mit Optionen ohne diese (Zeichen) ist keine gültige Syntax und führt mit hoher Wahrscheinlichkeit zu unerwarteten Effekten. |
---|
Siehe nachfolgenden externen Link: Options-Direktive
DirectoryIndex index.html index.htm
Name(n) der Index
-Seiten. Hier werden die Namen definiert, die der Apache HTTP Server automatisch ergänzt und ausliefert, wenn anstelle einer expliziten Datei, ein Verzeichnis vom Client angefordert wurde. Dies ist zwingend erforderlich, damit Benutzer einer Web-Seite wie z.B. http://www.tachtler.net anfragen können, ohne einen Namen der gewünschten Datei selbst angeben zu müssen. Der Apache HTTP Server wird die Reihenfolge von links nach rechts durchgehen und die Datei ausliefern, welche zuerst gefunden wurde.
#Include conf/extra/httpd-userdir.conf
Excludieren durch Auskommentierung der Konfigurationsdatei /etc/httpd/conf/extra/httpd-userdir.conf
. Diese Beinhaltet die Einstellungen zur Veröffentlichung von benutzerdefinierter Web-Seiten unter dem z.B. HOME-Verzeichnis eines UNIX-Benutzers (~/user-URL-Pfade) und soll hier nicht zur Anwendung kommen, da sonst z.B. Benutezr mit einem shell
-Account eigene Web-Inhalte unkontrolliert zur Verfügung stellen könnten.
Include conf/extra/httpd-info.conf
Includieren durch Einkommentierung der Konfigurationsdatei /etc/httpd/conf/extra/httpd-info.conf
. Diese Konfigurationsdatei beinhaltet Einstellungen zu Statusmeldungen und Informationen des Servers, abrufbar unter speziellen URL-Ergänzungen /server-status
und /server-info
.
Siehe auch nachfolgenden internen Link: Apache HTTP Server ArchLinux - info-Konfiguration
Basis-Konfiguration: /srv/http/index.html
Durch Neuanlage einer HTML-Datei in nachfolgendem Verzeichnis mit nachfolgendem Inhalt und nachfolgendem Befehl, kann die Auslieferung einer minimalistischen statischen Web-Seite durch den Apache HTTP Server erreicht werden:
# vim /srv/http/index.html
Nachfolgend der Inahlt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>It works! Apache httpd</title> </head> <body> <p>It works!</p> </body> </html>
Basis-Konfiguration: Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Basis-Konfiguration: Tests
Wenn der Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, kann die Abfrage mittels eines Browsers erfolgen, wie im nachfolgenden Bild dargestellt:
Durch anhängen nachfolgenden Zusatzes an die URL, wie z.B. /NotFound
kann - sofern keine Datei mit diesem Namen im Verzeichnis /srv/http
vorhanden ist, eine Fehlermeldung - hier Code: 404 erzeugt werden, wie nachfolgender Aufruf zeigt:
Wie zu sehen ist, ist die Fehlermeldung in
- deutscher Sprache
da dies im Browser als die bevorzugte Sprache eingestellt wurde.
Weiterhin ist auch das Ergebnis der Konfiguration der E-Mail-Adresse mittels der Direktive
ServerAdmin webmaster@tachtler.net
zu sehen, wenn eine Fehlermeldung generiert wird und der Mauszeiger über den Link - Webmaster bewegt wird.
default-Konfiguration
Nachfolgende Konfigurationen betreffenn grundlegende Konfigurationen des Apache HTTP Servers
default-Konfiguration: /etc/httpd/conf/extra/httpd-default.conf
Verzeichnis/Name | Beschreibung |
---|---|
/etc/httpd/conf/extra/httpd-default.conf | Beinhaltet zusätzliche Einstellungen für den Hauptserver |
/etc/httpd/conf/extra/httpd-default.conf
Erklärungen:
ServerTokens Prod
Ausführlichkeitseinstellung für die Ausgabe der Verionsangabe des für den HTTP-Antwort-Header: Server
. Diese Direktive legt fest, wie ausführlich der Apache HTTP Server dessen Versionsinformationen im HTTP-Antwort-Header: Server
und in der durch ServerSignature
definierten Fußzeile von automatisch generierten Dokumenten ausgibt und die INformationen die an den Client zurückgesendet werden, die eine Beschreibung des allgemeinen Betriesbsystemtyps des Servers wie auch Informationen über einkompilierte Module enthält.
Einstellung | Beschreibung |
---|---|
ServerTokens Prod[uctOnly] | Der Server sendet (z.B.): Server: Apache |
ServerTokens Major | Der Server sendet (z.B.): Server: Apache/2 |
ServerTokens Minor | Der Server sendet (z.B.): Server: Apache/2.4 |
ServerTokens Min[imal] | Der Server sendet (z.B.): Server: Apache/2.4.53 |
ServerTokens OS | Der Server sendet (z.B.): Server: Apache/2.4.53 (Unix) |
ServerTokens Full | Standard wenn nicht angegeben - Der Server sendet (z.B.): Server: Apache/2.4.53 (Unix) PHP/7.4.28 |
HINWEIS - Diese Einstellung gilt für den gesamten Server und kann nicht auf Virtual-Host-Basis aktiviert oder deaktiviert werden.
Siehe nachfolgende externe Links: ServerTokens und ServerSignature
default-Konfiguration: Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
default-Konfiguration: Tests
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, kann die Abfrage mittels eines Browsers erfolgen, wie im nachfolgenden Bild dargestellt:
Durch erneutes anhängen nachfolgenden Zusatzes an die URL, wie z.B. /NotFound
kann erneut - sofern immer noch keine Datei mit diesem Namen im Verzeichnis /srv/http
vorhanden ist, eine Fehlermeldung - hier Code: 404 erzeugt werden, wie nachfolgender Aufruf zeigt:
Wie zu sehen ist, ist auch das Ergebnis der Konfiguration der Apache HTTP Server-Versionsinformationsanzeige mittels der Direktive
ServerTokens Prod
wenn eine Fehlermeldung generiert wird, nun weniger gesprächig.
/usr/share/httpd/error/include/bottom.html
Wenn eine Fehlerseite ausgegeben wird, wird aktuell keine Datum und keine Uhrzeit mit der Fehlerseite mehr angezeigt, wie nachfolgendes Beispiel demonstriert:
Der Aufruf der URL:
sollte nachfolgende Anzeige zum Vorschein bringen:
Falls das Datum und die Uhrzeit der Fehlermeldung mit angezeigt werden sollen, kann die Konfigurationsdatei
/usr/share/httpd/error/include/bottom.html
wie folgt erweitert werden.
Die Anpassungen werden mit einem vorangestellten Kommentar in der Form
<!-- # Tachtler - new --> ... <!-- # Tachtler - end -->
gekennzeichnet.
(Komplette Konfigurationsdatei)
</p> <p> <!--#include virtual="../contact.html.var" --> </p> <h2>Error <!--#echo encoding="none" var="REDIRECT_STATUS" --></h2> <address> <a href="/"><!--#echo var="SERVER_NAME" --></a><br /> <!-- # Tachtler - new --> <!--#config timefmt="%A, %d-%b-%Y %H:%M:%S %Z" --> <span><!--#echo var="DATE_LOCAL" --></span><br /> <!-- # Tachtler - end --> <span><!--#echo var="SERVER_SOFTWARE" --></span> </address> </body> </html>
Es müssen effektiv die nachfolgenden Zeilen an der entsprechenden Stelle eingefügt werden:
<!-- # Tachtler - new --> <!--#config timefmt="%A, %d-%b-%Y %H:%M:%S %Z" --> <span><!--#echo var="DATE_LOCAL" --></span><br /> <!-- # Tachtler - end -->
Nachfolgende Tabelle zeigt die gebräuchlichsten Argumente für (timefmt
):
Eine vollständige Liste aller Argumente kann unter nachfolgendem externen Link aufgerufen werden:
Argument | Beschreibung |
---|---|
%a | kurzer Wochentagname |
%A | langer Wochentagname |
%b | kurzer Monatsname |
%B | langer Monatsname |
%c | bevorzugte Datum und Zeit Anzeige |
%d | Tag des Monats als Nummer |
%H | Stunden (24-Stunden Format) |
%I | Stunden (12-Stunden Format) |
%j | Tag im Jahr |
%m | Stunden des Monats als Nummer |
%M | Minute als Nummer |
%p | AM oder PM anzeigen |
%S | Sekunden als Nummer |
%U | Wochentag als Nummer (0-7) |
%w | Wochennummer |
%x | bevorzugtes Datum ohne Zeit Anzeige |
%X | bevorzugte Zeit ohne Datum Anzeige |
%y | zweistellige Jahreszahl |
%Y | vierstellige Jahreszahl |
%Z | Zeitzone |
Wenn nach der vorangestellten Konfiguration eine Fehlerseite ausgegeben wird, wird das aktuelle Datum und die aktuelle Uhrzeit mit der Fehlerseite angezeigt, wie nachfolgendes Beispiel demonstriert:
ACHTUNG - Leider muss die Anpassung der Konfigurationsdatei /usr/share/httpd/error/include/bottom.html nach jedem Apache HTTP Server-Update erneut vorgenommen werden! |
---|
info-Konfiguration
Nachfolgende Konfiguration ermöglicht es zwei URL-Erweiterungen zu implementieren, welche unter
/server-status
- Statusinformationen zum Server bzw. virtuellen Host?auto
- Maschinell lesbare Ausgabe erzeugen?refresh=N
- Automatische Aktualisierung alleN
Sekunden
/server-info
- Informationen zu Modulnamen, Konfigurationen, Hooks, Modulen und dem Server selbst?Modulname
- Beschränkung der Ausgabe von Informationen zu einem Modul mit dem angegeben Namen?config
- Ausgabe der Konfiguration inklusive aller inkludierten Konfigurationsdateien?hooks
- Ausgabe nur der einzelnen Hooks, mit denen die Module verknüpft sind?list
- Ausgabe einer einfachen Liste aller geladenen Module?server
- Ausgabe der Grundinformationen des Apache HTTP Servers
abgerufen werden können.
info-Konfiguration: /etc/httpd/conf/extra/httpd-info.conf
Verzeichnis/Name | Beschreibung |
---|---|
/etc/httpd/conf/extra/httpd-info.conf | Beinhaltet Einstellungen zu Statusmeldungen und Informationen des Servers, abrufbar unter speziellen URL-Ergänzungen /server-status und /server-info |
/etc/httpd/conf/extra/httpd-info.conf
Erklärungen:
Require all granted
Zugriff auf die URL-Erweiterung /server-status
, ohne Beschränkungen.
Siehe auch nachfolgenden externen Link: Require
HINWEIS - Der Zugriff auf diese URL-Erweiterung sollte durch eine Zugriffsbeschränkung eingeschränkt werden
Siehe auch nachfolgende internen Links:
ExtendedStatus On
Statusinformationen für jede einzelne Abfrage aktivieren. Beim setzen auf On
werden auch zusätzlich Informationen über jede einzelne Abfrage angezeigt.
SeeRequestTail On
Anzeige der letzten 63 Zeichen aller Statusinformationen für jede einzelne Abfrage und nicht der ersten 63 Zeichen, was der Standard wäre
Require all granted
Zugriff auf die URL-Erweiterung /server-info
, ohne Beschränkungen.
Siehe auch nachfolgenden externen Link: Require
HINWEIS - Der Zugriff auf diese URL-Erweiterung sollte durch eine Zugriffsbeschränkung eingeschränkt werden
Siehe auch nachfolgende internen Links:
info-Konfiguration: Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
info-Konfiguration: Tests
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, können nachfolgende Abfragen mittels eines Browsers erfolgen, wie in nachfolgenden Bildern dargestellt durchgeführt werden:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-status
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-status?auto
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-status?refresh=5
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-info
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL, z.B. hier /server-info?mod_info.c
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?config
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?hooks
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?list
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?server
kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:
languages-Konfiguration
languages-Konfiguration: /etc/httpd/conf/extra/httpd-language.conf
Verzeichnis/Name | Beschreibung |
---|---|
/etc/httpd/conf/extra/httpd-language.conf | Einstellungen für die Zuordnung zwischen zusätzlichen Dateiendungen und Dokumentsprachen |
/etc/httpd/conf/extra/httpd-language.conf
Erklärungen:
LanguagePriority de en ca cs da el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW
Änderung der Reihenfolge des zu verwendenden Sprache, wenn der anfragende Clinet, keine Sprachpräferenzen mit angefordert hat.
languages-Konfiguration: /etc/httpd/conf/httpd.conf
Bevor ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt werden soll, ist es erforderlich für den nachfolgenden Test die Konfigurationsdatei /etc/httpd/conf/httpd.conf
erneut zu verändern.
Nachfolgende die Ergänzung, welche vorgenommen werden soll:
(Nur relevanter Ausschnitt):
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/srv/http" <Directory "/srv/http"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # # Tachtler # default: Options Indexes FollowSymLinks Options -Indexes +FollowSymLinks +MultiViews # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # Require all granted </Directory>
Erklärungen:
Options -Indexes +FollowSymLinks +MultiViews
Das hinzufügen der Option +MultiViews
, generiert anhand der Dateiendungen und anhand der Standard MIME-Grundeinstellungen automatisch eine Type-Map. Die Multiview-Suche funktioniert nach nachfolgendem Schema. Es wir eine Datei vom Client angefordert, da diese aber mit genau diesem Dateinamen nicht vorhanden ist, hier index.html
, wird eine Content-Negotiation durchgeführt und nach dieser Datei mit einer Sprachendung, wie hier z.B. .de
oder .en
gesucht und diese dann versucht auszuliefern.
languages-Konfiguration: /srv/http/index.html.de und /srv/http/index.html.en
Bevor ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt werden soll, soll zuerst nachfolgende Datei, falls diese bereits vorhanden sein sollte, wie folgt gelöscht werden:
# rm /srv/http/index.html
Anschließend sollten zwei neue Dateien
/srv/http/index.html.de
/srv/http/index.html.en
mit nachfolgenden Befehelen und Inhalt wie nachfolgend dargestellt angelegt werden:
(Komplette HTML-Dateien):
# vim /srv/http/index.html.de
Nachfolgend der Inhalt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Es funktioniert! Apache httpd</title> </head> <body> <p>Es funktioniert!</p> </body> </html>
# vim /srv/http/index.html.en
Nachfolgend der Inhalt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>It works! Apache httpd</title> </head> <body> <p>It works!</p> </body> </html>
languages-Konfiguration: Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
languages-Konfiguration: Tests
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, können nachfolgende Abfragen mittels des shell
-Werkzeuges - telnet
- wie folgt durchgeführt werden:
Nachfolgende drei Zeilen sind einzugeben und dann muss zwei mal die [Enter/Return]-Taste gedrückt werden, um nachfolgende Ausgabe zu erzeugen:
# telnet apache.tachtler.net 80 GET / HTTP/1.0 Host: apache.tachtler.net
(Nachfolgend die tatsächliche Ausführung):
# telnet apache.tachtler.net 80 Trying 192.168.0.30... Connected to apache.tachtler.net. Escape character is '^]'. GET / HTTP/1.0 Host: apache.tachtler.net HTTP/1.1 200 OK Date: Sun, 10 Apr 2022 05:17:15 GMT Server: Apache Content-Location: index.html.de Vary: negotiate,accept-language TCN: choice Last-Modified: Mon, 04 Apr 2022 18:54:46 GMT ETag: "cd-5dbd8a97fc84d" Accept-Ranges: bytes Content-Length: 205 Connection: close Content-Type: text/html Content-Language: de <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Es funktioniert! Apache httpd</title> </head> <body> <p>Es funktioniert!</p> </body> </html> Connection closed by foreign host.
HINWEIS - Falls die LanguagePriority
entsprechend angepasst wurde und der Client keine Sprachpräferenz sendet, wird Eine Sprache nach der Anderen der Reihenfolge nach angewendet, die z.B. de
, an die angeforderte Datei angehängt und falls die so neu entstandene Datei gefunden wird, ausgeliefert!
Nachfolgend eine ähnliches Beispiel, nur mit Angabe einer Sprachpräferenz, hier z.B. en
Nachfolgende vier Zeilen sind einzugeben und dann muss zwei mal die [Enter/Return]-Taste gedrückt werden, um nachfolgende Ausgabe zu erzeugen:
# telnet apache.tachtler.net 80 GET / HTTP/1.0 Host: apache.tachtler.net Accept-Language: en
(Nachfolgend die tatsächliche Ausführung):
# telnet apache.tachtler.net 80 Trying 192.168.0.30... Connected to apache.tachtler.net. Escape character is '^]'. GET / HTTP/1.0 Host: apache.tachtler.net Accept-Language: en HTTP/1.1 200 OK Date: Sun, 10 Apr 2022 05:23:12 GMT Server: Apache Content-Location: index.html.en Vary: negotiate,accept-language TCN: choice Last-Modified: Sun, 03 Apr 2022 15:49:41 GMT ETag: "bf-5dbc1f5c29f80" Accept-Ranges: bytes Content-Length: 191 Connection: close Content-Type: text/html Content-Language: en <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>It works! Apache httpd</title> </head> <body> <p>It works!</p> </body> </html> Connection closed by foreign host.
multilang-errordoc-Konfiguration
multilang-errordoc-Konfiguration: /etc/httpd/conf/extra/httpd-multilang-errordoc.conf
Verzeichnis/Name | Beschreibung |
---|---|
/etc/httpd/conf/extra/httpd-multilang-errordoc.conf | Beinhaltet Einstellungen für Mehrsprachige Fehlermeldungsseiten |
/etc/httpd/conf/extra/httpd-multilang-errordoc.conf
Erklärungen:
LanguagePriority de en cs es fr it ja ko nl pl pt-br ro sv tr
Änderung der Reihenfolge des zu verwendenden Sprache, wenn der anfragende Clinet, keine Sprachpräferenzen mit angefordert hat und eine Fehlermeldung erzeugt wird, da eine Anfrage nicht, aus welchem Grund auch immer, beantwortet werden kann.
multilang-errordoc-Konfiguration: Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
multilang-errordoc-Konfiguration: Test
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, können nachfolgende Abfragen mittels des shell
-Werkzeuges - telnet
- wie folgt durchgeführt werden:
Nachfolgende drei Zeilen sind einzugeben und dann muss zwei mal die [Enter/Return]-Taste gedrückt werden, um nachfolgende Ausgabe zu erzeugen:
# telnet apache.tachtler.net 80 GET /NotFound HTTP/1.0 Host: apache.tachtler.net
(Nachfolgend die tatsächliche Ausführung):
# telnet apache.tachtler.net 80 Trying 192.168.0.30... Connected to apache.tachtler.net. Escape character is '^]'. GET /NotFound HTTP/1.0 Host: apache.tachtler.net HTTP/1.1 404 Not Found Date: Sun, 10 Apr 2022 05:52:46 GMT Server: Apache Vary: accept-language,accept-charset Accept-Ranges: bytes Connection: close Content-Type: text/html; charset=utf-8 Content-Language: de Expires: Sun, 10 Apr 2022 05:52:46 GMT <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"> <head> <title>Objekt nicht gefunden!</title> <link rev="made" href="mailto:webmaster@tachtler.net" /> <style type="text/css"><!--/*--><![CDATA[/*><!--*/ body { color: #000000; background-color: #FFFFFF; } a:link { color: #0000CC; } p, address {margin-left: 3em;} span {font-size: smaller;} /*]]>*/--></style> </head> <body> <h1>Objekt nicht gefunden!</h1> <p> Der angeforderte URL konnte auf dem Server nicht gefunden werden. Sofern Sie den URL manuell eingegeben haben, überprüfen Sie bitte die Schreibweise und versuchen Sie es erneut. </p> <p> Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den <a href="mailto:webmaster@tachtler.net">Webmaster</a> hierüber. </p> <h2>Error 404</h2> <address> <a href="/">apache.tachtler.net</a><br /> <!-- # Tachtler - new --> <span>Sunday, 10-Apr-2022 07:52:46 CEST</span><br /> <!-- # Tachtler - end --> <span>Apache</span> </address> </body> </html> Connection closed by foreign host.
HINWEIS - Falls die LanguagePriority
entsprechend angepasst wurde und der Client keine Sprachpräferenz sendet, wird Eine Sprache nach der Anderen der Reihenfolge nach angewendet und ausgeliefert!
Basic Authentifizierung
Die einfachste Art der Authentifizierung mittels basic
Authentifizierung in Kombination mit einfachen Text-Dateien.
Basic Authentifizierung: htpasswd
Mit nachfolgendem Befehl kann eine neue Passwortdatei innerhalb eines Verzeichnisses, hier z.B.
/etc/httpd/conf
wie folgt erzeugt werden:
# htpasswd -c -B -C 6 /etc/httpd/conf/.htpasswd klaus New password: Re-type new password: Adding password for user klaus
Erklärungen:
Die verwendeten Parameter haben nachfolgende Bedeutung:
Parameter | Erklärung |
---|---|
-c | Erstellt eine neue Passwortdatei mit dem angegebenen Dateinamen |
-B | Erzwingen Sie die bcrypt-Verschlüsselung des Passworts (sehr sicher). |
-C 6 | Legen die für den bcrypt-Algorithmus verwendete Berechnungszeit fest (höher ist sicherer, aber langsamer, Standard: 5, gültig: 4 bis 17). |
/etc/httpd/conf/.htpasswd | Pfad und Dateiname für die Passwortdatei - hier .htpasswd |
klaus | Benutzername, welcher der Passwortdatei hinzugefügt werden soll |
HINWEIS - Der Befehl ohne die Option -c
fügt einen weiteren Benutzer hinzu!
Mit nachfolgendem Befehl kann eine bestehende Passwortdatei innerhalb eines Verzeichnisses, hier z.B.
/etc/httpd/conf/.htpasswd
wie folgt um einen weiteren Benutzernamen erweitert werden:
# htpasswd -B -C 6 /etc/httpd/conf/.htpasswd petra New password: Re-type new password: Adding password for user petra
HINWEIS - Benutzer können durch einfaches entfernen der jeweiligen Zeile aus der Passwortdatei entfernt werden!
Nachfolgende Befehle setzen noch die richtigen Besitz- und Dateirechte für die soeben neu erstellt Passwortdatei - /etc/httpd/conf/.htpasswd
:
Besitzrechte:
# chown root.http /etc/httpd/conf/.htpasswd
Dateirechte:
# chmod 640 /etc/httpd/conf/.htpasswd
Mit nachfolgendem Befehl kann überprüft werden, ob die Erstellung und das Setzen der Besitz- und Dateirechte wie gewünscht durchgeführt wurde
# ls -la /etc/httpd/conf/.htpasswd -rw-r----- 1 root http 134 Apr 11 18:31 /etc/httpd/conf/.htpasswd
Nachfolgender Befehl zeigt den Inhalt der Passwortdatei - /etc/httpd/conf/.htpasswd
:
# cat /etc/httpd/conf/.htpasswd klaus:$2y$06$mhZ6mz8rVfvRTooKl6VCmejxLkC1jH/ckxAyyOs/5lbUHTVP8AvhG petra:$2y$06$MNhcUbOIFYef92sYC1S8/.l/sHPTbGVWJAKlwgFPZEOLRreULiXvi
/etc/httpd/conf/httpd.conf
Anschliessend sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
im Bereich DocumentRoot
durchzuführen:
(Nur relevanter Ausschnitt):
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/srv/http" <Directory "/srv/http"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # # Tachtler # default: Options Indexes FollowSymLinks Options -Indexes +FollowSymLinks +MultiViews # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # # Tachtler # default: Require all granted AuthType Basic AuthName "Password protected area!" AuthUserFile conf/.htpasswd Require valid-user </Directory>
Erklärungen:
# Tachtler # default: Require all granted AuthType Basic AuthName "Password protected area!" AuthUserFile conf/.htpasswd Require valid-user
Anstelle der Standard Zugriffsrechte - Require all granted
ist es erforderlich die vorhergehend gezeigt Konfiguration, welche minimal aus den Komponenten:
AuthType
- Art der AuthentifizierungAuthName
- Text der vom Client angezeigt werden kann, welcher bei der Authentifizierung präsentiert werden sollAuthUserFile
- Relativer Pfad zur DirektiveServerRoot
″/etc/httpd″
Require valid-user
- Zugriffsformulierung, hier „gültige Benutzer“
Basic Authentifizierung: htpasswd - Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Basic Authentifizierung: htpasswd - Test
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, kann die Abfrage mittels eines Browsers erfolgen, wie im nachfolgenden Bild dargestellt:
Digest Authentifizierung
Die einfachste und etwas sicherere Art der Authentifizierung mittels digest
Authentifizierung in Kombination mit einfachen Text-Dateien.
Digest Authentifizierung: htdigest
Eine erheblich sicherere Methode, gegenüber der Apache HTTP Server ArchLinux - Basic Authentifizierung - Basic Authentifizierung: htpasswd , stellt die Apache HTTP Server ArchLinux - Digest Authentifizierung - Digest Authentifizierung: htdigest dar.
Bei der Apache HTTP Server ArchLinux - Digest Authentifizierung - Digest Authentifizierung: htdigest werden keine Klartextpasswörter übertragen, sondern ein MD5-Hash, der aus den Anmeldedaten erzeugt wird.
Mit nachfolgendem Befehl kann eine neue Passwortdatei innerhalb eines Verzeichnisses, hier z.B.
/etc/httpd/conf
wie folgt erzeugt werden:
# htdigest -c /etc/httpd/conf/.htdigest "Password protected area!" klaus Adding password for klaus in realm Password protected area!. New password: Re-type new password:
Erklärungen:
Die verwendeten Parameter haben nachfolgende Bedeutung:
Parameter | Erklärung |
---|---|
-c | Erstellt eine neue Passwortdatei mit dem angegebenen Dateinamen |
/etc/httpd/conf/.htdigest | Pfad und Dateiname für die Passwortdatei - hier .htdigest |
“Password protected area!” | Der Realm-Name, zu dem der Benutzername gehört |
klaus | Benutzername, welcher der Passwortdatei hinzugefügt werden soll |
HINWEIS - Der Befehl ohne die Option -c
fügt einen weiteren Benutzer hinzu!
Mit nachfolgendem Befehl kann eine bestehende Passwortdatei innerhalb eines Verzeichnisses, hier z.B.
/etc/httpd/conf/.htdigest
wie folgt um einen weiteren Benutzernamen erweitert werden:
# htdigest /etc/httpd/conf/.htdigest "Password protected area!" petra Adding user petra in realm Password protected area! New password: Re-type new password:
HINWEIS - Benutzer können durch einfaches entfernen der jeweiligen Zeile aus der Passwortdatei entfernt werden!
Nachfolgende Befehle setzen noch die richtigen Besitz- und Dateirechte für die soeben neu erstellt Passwortdatei - /etc/httpd/conf/.htdigest
:
Besitzrechte:
# chown root.http /etc/httpd/conf/.htdigest
Dateirechte:
# chmod 640 /etc/httpd/conf/.htdigest
Mit nachfolgendem Befehl kann überprüft werden, ob die Erstellung und das Setzen der Besitz- und Dateirechte wie gewünscht durchgeführt wurde
# ls -la /etc/httpd/conf/.htdigest -rw-r----- 1 root http 128 Apr 11 20:20 /etc/httpd/conf/.htdigest
Nachfolgender Befehl zeigt den Inhalt der Passwortdatei - /etc/httpd/conf/.htdigest
:
# cat /etc/httpd/conf/.htdigest klaus:Password protected area!:31e5e4076b3e3519318b7611f8fb0eb5 petra:Password protected area!:b2313b18ddfd181c49f321002356a68a
/etc/httpd/conf/httpd.conf - Teil 1
Anschliessend sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
durchzuführen:
(Nur relevanter Ausschnitt):
# Tachtler # default: #LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule auth_digest_module modules/mod_auth_digest.so
Erklärungen:
# Tachtler # default: #LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule auth_digest_module modules/mod_auth_digest.so
Um die Apache HTTP Server ArchLinux - Digest Authentifizierung nutzen zu können, muss das Apache HTTP Server-Modul - mod_auth_digest
geladen werden.
/etc/httpd/conf/httpd.conf - Teil 2
Anschliessend sind nachfolgende minimale Änderungen, hier an der Konfigurationsdatei
/etc/httpd/conf/httpd.conf
im Bereich DocumentRoot
durchzuführen:
(Nur relevanter Ausschnitt):
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/srv/http" <Directory "/srv/http"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # # Tachtler # default: Options Indexes FollowSymLinks Options -Indexes +FollowSymLinks +MultiViews # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # # Tachtler # default: Require all granted AuthType Digest AuthName "Password protected area!" AuthDigestDomain "/" "http://apache.tachtler.net/" AuthDigestProvider file AuthUserFile conf/.htdigest Require valid-user </Directory>
Erklärungen:
# Tachtler # default: Require all granted AuthType Digest AuthName "Password protected area!" AuthDigestDomain "/" "http://apache.tachtler.net/" AuthDigestProvider file AuthUserFile conf/.htdigest Require valid-user
Anstelle der Standard Zugriffsrechte - Require all granted
ist es erforderlich die vorhergehend gezeigt Konfiguration, welche minimal aus den Komponenten:
AuthType
- Art der AuthentifizierungAuthName
- Muss der definierte Realm sein !*AuthDigestDomain
- URIs, die sich im gleichen Schutzraum für die Digest-Authentifizierung befindenAuthDigestProvider
- Legt den/die Authentifizierungsanbieter für diesen Schutzraum festAuthUserFile
- Relativer Pfad zur DirektiveServerRoot
″/etc/httpd″
Require valid-user
- Zugriffsformulierung, hier „gültige Benutzer“
Digest Authentifizierung: htdigest - Neustart
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Digest Authentifizierung: htdigest - Test
Wenn ein erneuter Neustart des Apache HTTP Server erfolgreich durchgeführt wurde, kann die Abfrage mittels eines Browsers erfolgen, wie im nachfolgenden Bild dargestellt:
Nützliche Befehle
Nachfolgende Befehle können bei der Administration eines Apache HTTP Servers nützlich sein.
HINWEIS - Die nachfolgende Auflistung erhebt keinen Anspruch auf Vollständigkeit !
/usr/bin/apachectl
Der nachfolgende Befehl
/usr/bin/apachectl
stellt das Apache Server Control Interface dar.
Nachfolgende eine Auflistung der gebräuchlichsten Befehle unter Zuhilfenahme von apachectl
:
Befehl | Beschreibung |
---|---|
apachectl configtest | Syntaktische Überprüfung der kompletten Konfiguration |
apachectl -t | Wie configtest |
apachectl -v | Ausgabe der Version |
apachectl -V | Ausgabe der Version und zusätzlicher Parameter |
apachectl -l | Ausgabe der einkompilierten Module |
apachectl -L | Ausgabe aller möglichen Konfigurationsdirektiven |
apachectl -t -D DUMP_VHOSTS | Auflistung aller konfigurierten virtuellen Hosts |
apachectl -t -D DUMP_RUN_CFG | Ausgabe der Laufzeit-Einstellungen |
apachectl -S | Wie -t -D DUMP_VHOSTS und -t -D DUMP_RUN_CFG |
apachectl -t -D DUMP_MODULES | Auflistung aller geladenen Module |
apachectl -M | Wie -t -D DUMP_MODULES |