Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_http_server_archlinux

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.

* 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:

  • apache - ist im extra-Repository von ArchLinux enthalten.

Mit nachfolgendem Befehl, wird das Pakete apache installiert:

# pacman -S --noconfirm apache

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket apache installiert wurden:

# pacman -Qil apache

Installierte Dateien

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:

ArchLinux - Apache HTTP Server - Mozilla Firefox

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

/etc/httpd/conf/httpd.conf

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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - index.html

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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /NotFound

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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - index.html

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:

Apache HTTP Server - Mozilla Firefox - /NotFound - ServerTokens

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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /NotFound - ServerTokens

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:

Apache HTTP Server - Mozilla Firefox - /NotFound - ServerTokens - bottom.hml - Datum und Uhrzeit

:!: 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 alle N 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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-status

Durch anhängen nachfolgenden Zusatzes an die URL: /server-status?auto

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:


ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-status?auto

Durch anhängen nachfolgenden Zusatzes an die URL: /server-status?refresh=5

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:


ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-status?refresh=5

Durch anhängen nachfolgenden Zusatzes an die URL: /server-info

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-info

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:


ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-info?mod_info.c

Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?config

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-info?config

Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?hooks

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-info?hooks

Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?list

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-info?list

Durch anhängen nachfolgenden Zusatzes an die URL: /server-info?server

kommt eine Ansicht in etwa wie nachfolgende zur Ansicht:

ArchLinux - Apache HTTP Server - Mozilla Firefox - /server-info?server

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,
    &uuml;berpr&uuml;fen Sie bitte die Schreibweise und versuchen Sie es erneut.
 
 
 
</p>
<p>
Sofern Sie dies f&uuml;r eine Fehlfunktion des Servers halten,
informieren Sie bitte den 
<a href="mailto:webmaster@tachtler.net">Webmaster</a>
hier&uuml;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 Authentifizierung
  • AuthName - Text der vom Client angezeigt werden kann, welcher bei der Authentifizierung präsentiert werden soll
  • AuthUserFile - Relativer Pfad zur Direktive ServerRoot ″/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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - Basic Authentifizierung: htpasswd - Dialog

ArchLinux - Apache HTTP Server - Mozilla Firefox - index.html

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

im Bereich DocumentRoot 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 Authentifizierung
  • AuthName - Muss der definierte Realm sein !*
  • AuthDigestDomain - URIs, die sich im gleichen Schutzraum für die Digest-Authentifizierung befinden
  • AuthDigestProvider - Legt den/die Authentifizierungsanbieter für diesen Schutzraum fest
  • AuthUserFile - Relativer Pfad zur Direktive ServerRoot ″/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:

ArchLinux - Apache HTTP Server - Mozilla Firefox - Basic Authentifizierung: htdigest - Dialog

ArchLinux - Apache HTTP Server - Mozilla Firefox - index.html

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
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/apache_http_server_archlinux.txt · Zuletzt geändert: 2022/04/24 09:16 von klaus