Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:soft:server:web-server

Web-Server

Apache

Download: http://httpd.apache.org/download.cgi

Dokumentation zum Apache HTTP Server Version 2.4: http://httpd.apache.org/docs/2.4/ (in deutsch)
Apache-Konfiguration: https://httpd.apache.org/docs/2.4/de/mod/core.html

Die verwendete Version von Apache:

juergen@ubuntu:~/src/apache$ /opt/install24/bin/httpd -v
Server version: Apache/2.4.33 (Unix)
Server built:   May 29 2018 17:30:50
juergen@ubuntu:~/src/apache$

Oder:

juergen@ubuntu:~/src/apache$ /opt/install24/bin/httpd -V
Server version: Apache/2.4.33 (Unix)
Server built:   May 29 2018 17:30:50
Server's Module Magic Number: 20120211:76
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/opt/servers"
 -D SUEXEC_BIN="/opt/servers/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"
juergen@ubuntu:~/src/apache$

:!: Die Verwendung des Steuerskripts apachectl ist die empfohlene Methode, das httpd-Programm zu starten. Dieses Skript setzt verschiedene Umgebungsvariablen, die für die korrekte Funktion von httpd unter einigen Betriebssystemen notwendig sind, und startet dann das httpd-Programm. apachectl reicht alle Kommandozeilenargumente durch, so dass alle httpd-Optionen auch mit apachectl verwendet werden können.

Apache starten:

# apachectl start

Beenden (sofort beenden):

# apachectl stop

Neustarten (sofort neustarten):

# apachectl restart

Neustarten ohne bestehende Verbindungen hart abzubrechen:

# apachectl graceful

Beenden ohne bestehende Verbindungen hart abzubrechen:

# apachectl graceful-stop

Aktuelle Konfigurationsdatei auf syntaktische Richtigkeit testen:

# apachectl configtest

:!: Um Apache im Debug-Modus zu starten, gibt man bei Start den Parameter -X. In diesem Modus ist nur ein einziger Worker-Prozess bzw. -Thread verfügbar und die Verbindung zum startenden Terminal wird nicht gelöst, sodass eventuelle Fehlermeldungen und Warnungen auf der Konsole erscheinen.

Nur einige kleine Beispiele hier.

httpd.conf

Die zentrale Konfigurationsdatei von Apache heißt httpd.conf und liegt defaultmäßig im Unterverzeichnis "conf".
Durch den Parameter -f kann eine andere Konfigurationsdatei (aus dem gleichen Unterverzeichnis) erzwungen werden.

httpd -k start -f AlternativesConfigFile

Für die Entwicklungs- und Testzwecke kann es hilfreich sein (:!: Vorsicht - das öffnet eine Sicherheitslücke!), zwei Handler server-info und server-status (mittels SetHandler in der "httpd.conf") zu aktivieren.

<Location /_info>
  SetHandler server-info
  Order deny,allow
  Deny from all
  Allow from 10.20.30.40
</Location>

<Location /_status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 10.20.30.40
</Location>

Wobei mit den Zahlen "10.20.30.40" die IP-Adresse gemeint ist, von der die Requests erlaubt sind. (:!: Diese Zugriffseinschränkung soll unbedingt ernst genommen werden!)

Für die o.g. Handler zuständige Module sollen vorher geladen sein (ebenfalls in "httpd.conf"):

LoadModule info_module modules/mod_info.so
LoadModule status_module modules/mod_status.so

:!: ACHTUNG:
Diese beiden Handler haben in den aus dem Internet erreichbaren produktiven Umgebungen aus Sicherheitsgründen nichts zu suchen!

Danach führt ein Aufruf wie etwa http://www.meine-webseite.tld/_info zur Anzeige der internen Server-Informationen.

Der Aufruf a la http://www.meine-webseite.tld/_status zeigt den aktuellen Status des WebServers.
Durch einen zusätzlichen Parameter nach dem Muster "refresh=AnzahlSekunden" läßt sich die Anzeige automatisch alle "AnzahlSekunden" aktualisieren.
Hier beispielsweise alle 60 Sekunden:
http://www.meine-webseite.tld/_status?refresh=60

:!: Sicherheitshinweis wegen CGI:
Wenn der WebServer außerhalb der speziellen (in "httpd.conf" definierten) "cgi-bin"-Verzeichnisse weitere CGI-Skripte enthält, deren Endungen nicht mittels "AddHandler" als ausführbar markiert sind, werden diese vom Server im Quelltext ausgeliefert.

Um z.B. Dateien mit den Endungen ".cgi", ".pl" und ".sh" als ausführbare CGI-Skripte zu konfigurieren, muss folgende Anweisung verwendet werden:

AddHandler cgi-script .cgi .pl .sh

Unterschiede zwischen AddHandler und SetHandler:

.htaccess

Zugriffsschutz bzw. Zugriffssteuerung mittels .htaccess - Server-Konfigurationsdateien für Web-Verzeichnisse.

:!: Hier ist nur eine sehr kurze Zusammenfassung von einigen Parameter. Für eine vollständige Beschreibung siehe Links unten.

Der Webserver überprüft bei jedem einzelnen Seitenzugriff (ohne zu cachen) vom angeforderten Dokument aus rekursiv sämtliche Verzeichnisse, ob ein ".htaccess" vorhanden ist. ".htaccess" gilt somit für das Verzeichnis, in dem es selbst liegt und für alle Unterverzeichnisse, und deren Unterverzeichnisse u.s.w., bis evtl. ein anderes ".htaccess" vorkommt. Ab dort und weiter nach unten gelten die Einstellungen aus dem neuen ".htaccess".

Passwortschutz

Hier ein Beispiel für ein .htaccess-File:

# .htaccess - Beispiel für Verzeichnisschutz durch Passwort
#
# "AuthType Basic" - ist unverschlüsselt und daher unsichen
# "AuthType Digest" - verschlüsselte Form
AuthType Digest
#
# Text der Aufforderung:
AuthName "Authentifizierung erforderlich"
#
# File (mit absolutem Pfad), in dem Namen der autorisierten User samt ihrer Passwörter gespeichert sind:
AuthUserFile /usr/lib/apache/.htusers
#
# Das gleiche, nur für Gruppen:
AuthGroupFile /usr/lib/apache/.htgroups
#
# Je nachdem, ob der Zugriff auf User- oder Gruppenebene:
# Require user <UserName1> <UserName2> <UserNameN>
# Require group <GruppenName>
# Hier ist der Zugriff nur den Usern "juergen" und "hans" erlaubt:
Require user juergen hans
#
# EOF

Ein Beispiel für das .htusers-File (Passwörter sind nach den Methoden Crypt oder MD5 verschlüsselt):

# User:Passwort
#
juergen:6P8j1UCXLcKRk
hans:e9pUNh16clXUY
albert:qxj6oH5LqWfTw
user1:1WetnNRmB6xRI
user2:xTLC77u/vOMBc
userN:1Kp9H1stUJibs
#
# EOF

Ein kleines Programm namens htpasswd (wird zusammen mit dem Apache geliefert) hilft bei der Erstellung des Passwort-Files.

Durch…

htpasswd -c .htusers juergen

…wird ein neues Passwort-File namens ".htusers" angelegt und nach der Eingabe des Passworts der User "juergen" samt verschlüsseltem Passwort dort eingetragen.

Ein Beispiel für das .htgroups-File:

# GruppenName: User1 User2 User3
#
WebEntwicklerTeam: max andreas karmen
#
# EOF

Zugriffsbegrenzung auf konkrete IP-Adressen, IP-Bereiche oder DNS-Adressen

Hier ein Beispiel für ein .htaccess-File:

# Erst die Reihenfolge:
Order deny,allow
#
# Zugriff von der Domain "aol.com" verbieten:
Deny from .aol.com
#
# Zugriff aus dem IP-Bereich 192.168.*.* verbieten:
Deny from 192.168
#
# Zugriff von der IP-Adresse 10.1.2.3 erlauben:
Allow from 10.1.2.3
#
# EOF

Wobei Deny from all oder Allow from all würde ein generelles Verbot oder Erlaubnis bedeuten.

Verzeichnis-Browsing

FIXME


Externe Links:

Content Negotiation

Webserver kann unterschiedliche Fassungen einer Ressource liefern.

Beispiel:
Wenn Dateien in einer Website mit einer zusätzlichen Endung abgespeichert sind, die jeweils einem ISO-Sprachcode entsprechen, wertet Apache den Header "Accept-Language" der Anfrage aus und liefert eine der Dateien index.html.de (Deutsch), index.html.en (Englisch) oder index.html.fr aus, obwohl der entsprechende Hyperlink nur auf index.html lautete.

Files mit "Multiple Extensions"

Files können mehr als eine Erweiterung haben. Die Rehenfolge dieser Erweiterungen ist normalerweise irrelevant. Zum Beispiel, wenn das File "welcome.html.fr" verweist auf den Content-Typ "text/html" und die Sprache "French", dann das File "welcome.fr.html" verweist auf exakt die gleiche Information.
Falls das Mapping mehrdeutig interpretiert werden kann, überwiegt die Erweiterung, die am rechtesten im Namen steht. Zum Beispiel, wenn ".gif" auf Media-Typ "image/gif" und ".html" auf "text/html" verweisen, dann das File "welcome.gif.html" wird mit dem Media-Typ "text/html" assoziiert.

Falls man erreichen möchte, dass ausschliesslich die letzte Erweiterung ausgewertet wird, dann sollte die Direktive Add* nicht benutzt werden. Zum Beispiel, falls das File "foo.html.cgi" als CGI-Skript behandelt werden soll, jedoch nicht das File "bar.cgi.html", dann sollte man anstelle "AddHandler cgi-script .cgi" in "httpd.conf" folgendes Konstrukt verwenden:

# Configure handler based on final extension only
<FilesMatch "[^.]+\.cgi$">
  SetHandler cgi-script
</FilesMatch>

Quelle: http://httpd.apache.org/docs/2.4/mod/mod_mime.html#multipleext

robots.txt

:!: robots.txt hat zwar nichts mit dem WebServer zu tun, gehört aber i.d.R. zur Austattung eines Web-Auftritts.

Die Datei enthält Anweisungen für Robots von Suchmaschinen, welcher Such-Robot welche Verzeichnisse auslesen darf und welche nicht. "robots.txt" (alles klein geschrieben) muss im root-Verzeichnis der Domain liegen (als Beispiel: http://www.domainname.tld/robots.txt).

So könnte die "robots.txt" aussehen (es wird hier keinem Suchmaschinen-Robot erlaubt, irgendetwas auszulesen):

# robots.txt zu http://www.domainname.tld/
User-agent: *
Disallow: /
# EOF

Externe Links:

Schutz gegen DoS

Hier sind einige Module erwähnt, die es helfen, bei einem DoS den Schaden zu begrenzen:

  • mod_evasive - Begrenzt Traffik pro Client-IP.
  • mod_cband - Steuert die Bandbreite und Anzahl von Connections.
  • mod_load_average - Generiert HTTP-Response 503 (Server is too busy), falls der Server zu stark ausgelastet ist.
  • mod_robots - Versucht Robots fern zu halten.

sonstiges

Programme für Apache schreiben: z.B. als CGI (Plugins) oder Apache-Module.

Makros vereinfachen Apache-Konfiguration: https://www.admin-magazin.de/News/Tipps/Makros-vereinfachen-Apache-Konfiguration (Mit dem Modul namens "mod_macro".)

Weitere WebServer


Stand: 11.09.2021

EOF

edv/soft/server/web-server.txt · Zuletzt geändert: 2021/09/11 13:59 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki