Installation
Apache2 Installation
Diese Doku gibt Ihnen einen Überblick über die Installation von Apache2 in Verbindung mit PHP sowie ergänzend eine Unterstützung von XSL Processing für PHP mit einer Installation unter Ubuntu in 2024.
Auch wenn sich über die Jahre die Versionsnummern verändern so sind die grundlegenden Prinzipien in Bezug auf Ubuntu, Apache2 und PHP immer ähnlich.
Damit Sie nicht auf die Idee kommen, alle Aktionen
als root
durchzuführen,
zeigen wir Ihnen hier kurz, wie Sie sich einen neuen
User anlegen können mit welchem Sie administrative
Tätigkeiten über die Konsole durchführen können.
# Neuen User 'deruser' als Alternative zu root anlegen
sudo adduser deruser
# Neuen User 'deruser' zur Gruppe der Sudos hinzufügen
sudo usermod -aG sudo deruser
# Wechseln vom aktuellen User wie root zu 'deruser'
su - deruser
# Anschließend haben Sie einen neuen Prompt
deruser@ubuntu:~$
Der Download und die Installation von Apache2,
PHP mit XML und XSL Support erfolgt, wie bei
Ubuntu in Bezug auf beliebte Pakete, bekanntlich
mit apt install
schmerzfrei.
Hinweis: Wir gehen davon aus, dass Sie nicht
unter root sondern einem zweiten User arbeiten
und für Befehle, welche Root-Rechte erfordern,
dem Befehl sudo
voranstellen.
# Apache2, PHP, Apache2-PHP-Mod und XSL-Support für PHP
sudo apt install apache2 php libapache2-mod-php php-xsl
Das System besorgt die zugehörigen Paketlisten
und informiert uns darüber, dass statt
php-xsl
das Paket php8.3-xml
stattdessen installiert werden wird.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'php8.3-xml' instead of 'php-xsl'
The following additional packages will be installed:
apache2-bin apache2-data apache2-utils libapache2-mod-php8.3 libapr1t64
libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64 liblua5.4-0
php-common php8.3 php8.3-cli php8.3-common php8.3-opcache
php8.3-readline ssl-cert
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser php-pear
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils
libapache2-mod-php libapache2-mod-php8.3 libapr1t64
libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64
liblua5.4-0 php php-common php8.3 php8.3-cli php8.3-common
php8.3-opcache php8.3-readline php8.3-xml ssl-cert
0 upgraded, 20 newly installed, 0 to remove and 171 not upgraded.
Need to get 7127 kB of archives.
After this operation, 31.0 MB of additional disk space will be used.
# ------------------------------------------------------------------------------
Do you want to continue? [Y/n] Y
Ohne an dieser Stelle ins Detail gehen
zu wollen: Es werden eine ganze Reihe von
Packages installiert, darunter mitunter
neben php8.3
und der zugehörigen php8.x-xml
+
Unterstützung auch ssl-cert
für SSL Unterstützung, php8.3-opcache
für die Beschleunigung von PHP über Caching und mehr.
Nach Bestätigung mit Y wird die eigentliche Installation fortgesetzt. Absschließend erhalten Sie noch ein paar Informationen dahingehend, ob irgendetwas einen Neustart erfordert.
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
Mit diesen Schritten haben Sie nun Apache2, PHP mit XML/XSL Support installiert.
Vor dem Hintergrund, dass wir Nginx als Proxy Server
installiert haben, um HTTP(S) Requests für Port 80 und
443 in Abhängigkeit von Domains und anderen Aspekten
auf mehrere Webservice routen zu können, die wir neben dem
hier installierten Apache2 Server zusätzlich auf dem
Server installieren, ist es erforderlich, dass der
Port für Apache2 von 80
auf beispielsweise den Port 8081
geändert wird.
Hinweis: Der Port 8080
wird
oftmals für den Apache Tomcat für Java Servlets und JSP
Anwendungen installiert.
Für den Fall, dass Sie mit 'nano' editieren wollen, nutzen Sie die nächste Zeile. Wir gehen davon aus, dass Sie wissen, wie der nano-Editor unter Linux funktioniert.
# Editieren der Apache2 Ports mit 'nano'
sudo nano /etc/apache2/ports.conf
Alternativ halten wir es gewohnt mit
'vi'. Auch hier gehen wir davon aus, dass Sie
wissen, welche Tastaturkürzel Sie benötigen, um
mit dem vi
zu
editieren.
# Editieren der Apache2 Ports im ports.conf File:
sudo vi /etc/apache2/ports.conf
Wir haben den Port jetzt auf
8081
und
den Port 443
für SSL Verbindungen auf 8443
verändert.
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 8081
<IfModule ssl_module>
Listen 8443
</IfModule>
<IfModule mod_gnutls.c>
Listen 8443
</IfModule>
Speichern Sie Ihre Änderungen des Files.
Im Falle des vi: ^:w
zum speichern und ^:q
für „quit“ zum Beenden.
Restart von Apache2
Sie müssten den Apache2 Server nun restarten, damit dieser die Änderungen kennt. Üblicherweise würde man die Konfiguration aber vorher noch testen. Darüber hinaus müssen wir aber noch den File 000-default.conf ändern.
sudo systemctl restart apache2
Der 000-default.conf
File
beinhaltet die Konfiguration eines virtuellen
Hosts welcher immer dann für das Rendering
einer Webseite anzeigt wird, wenn der Apache2
ein HTTP(S) Request nicht einem anderen
virtuellen Host zuordnen kann.
/etc/apache2/sites-available/000-default.conf
: Diesen
File öffnen Sie mit einem Editor wie vi
,
nano
oder was Ihnen sonst so vorschwebt.
Die Zeile, die Sie ändern müssen, ist die gleich
die erste Zeile: Ändern Sie <VirtualHost *:80
auf <VirtualHost *:8081
bzw. den Port,
den Sie für den Apache2 gern wünschen.
<VirtualHost *:8081>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
DocumentRoot /var/www/html
definiert
in diesem File den Ordner in welchem sich der HTML- bzw. PHP-Code befinden wird,
mit welchem die Default-Seite durch den Apache2 HTTP Server erzeugt werden wird.
Dieses setzt voraus, dass Sie einen entsprechenden
/var/www
Folder haben,
um darin den html
Order mit einem
index.html oder index.php File anzulegen.
Damit befassen wir uns im nächsten Schritt.
Damit unser Apache2 HTTP Server nun diese Änderungen auch berücksichtigt müssen wir diesen nun neustarten.
Eine Vielzahl von Services unter Linux lassen sich über systemctl restart {name} restarten, darunter auch der Apache2.
Hinweis: Sie können über einen Zusatzbefehl auch die Konfiguration zuerst testen.
sudo systemctl restart apache2
WWW-Verzeichnise
Apache2 www-Verzeichnisse
DE
EN
CN
Ein Apache2 HTTP Server ist schön und gut, aber damit dieser Server auch irgendwelche Inhalte anzeigen kann, ist es erforderlich, dass diese Inhalte und Layouts in HTML und/oder PHP auch programmiert wurden und vom Server gefunden werden. Genau hierzu benötigen wir ein www-Verzeichnis.
Das
/var/www
Verzeichnis
ist das übliche Verzeichnis unter Linux in welchem
der HTML- und PHP-Code sowie auch Files für
Bildateien, CSS-Code, JavaScript und vieles
andere mehr abgelegt wird.
Sinnigerweise könnten Sie vor dem Anlegen des Verzeichnisses mal schauen, ob es nicht schon eines gibt. Sie können mit dem folgenden Befehl aber ein Verzeichnis NICHT überschreiben.
mkdir /var/www
Sie werden feststellen, dass es diesen Ordner
bereits gibt, denn bei der Installation des
Apache2 Servers wurde das Verzeichnis
/var/www/html
bereits angelegt.
Im nächsten Schritt mehr dazu.
Das /var/www/html
Verzeichnis
beinhaltet den HTML Code einer Default-Seite welche
vom Apache2 Server immer dann angezeigt wird, wenn er
ein HTTP Request für eine Domain erhält die er
keinem anderen virtuellen Host zuordnen kann.
Anders formuliert: Jede Anfrage, die beim Apache2 Server ankommt, wird damit zur Auslieferung des HTML Codes dieser Default-Seite führen.
Wenn Sie möchten so können Sie sich die Files und den Quellcode in diesem Ordner anschauen. Sie können es allerdings auch lassen und darauf warten, wie wir diese Seite in einem der nächsten Schritte über den Browser aufrufen und anzeigen.
Hinweis: Sie können das Anzeigen einer solchen Seite auch unterbinden. Wir befassen uns hier aber nur mit einer ersten Standard-Installation zu Demonstrationszwecken.
Eine IP wie 123.456.789.123
, welche
Sie für den Server erhalten haben, ermöglicht es Ihnen,
dass Sie nun den Server über den dem Apache2 zugewiesen
Port 8081
adressieren
können.
http://123.456.789.123:8081
Es versteht sich von selbst, dass Sie hier Ihre IP Adresse angeben müssen.
Konfiguration
Apache2 Konfiguration
DE
EN
CN
Nutzen Sie die Tabs auf der linken Seite, um sich die Liste der Kapitel im jeweiligen Bereich auflisten zu lassen.
Einrichtung virtueller Hosting
/etc/apache2/sites-available
<Directory /var/www/example.com>
Options -Indexes FollowSymLinks
AllowOverride All
Require all granted
# Verhindert die Anzeige von .htaccess Dateien
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
# Verhindert die Anzeige von PHP-Dateien
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
</Directory>
Options -Index dient dazu, das Auflisten von Dateien zu verhindern, wenn es in einem Ordner keinen index.php File gibt.
FileMatch dient dazu, über einen regulären Ausdruck zu definieren, dass Dateinahmen, die mit einem Punkt gefolgt von ht beginnen, nicht angezeigt werden.
Auch den Zugriff auf PHP Files kann man unterbinden, was allerdings an dem Punkt schwieriger wird, wenn man zumindest einen bestimmten PHP File ausführen möchte.
Nach Änderungen
Damit der Apache2 HTTP Server die vorgenommenen Änderungen kennt, sollte man zuerst die Konfiguration testen und anschließend den Apache2 restarten.
sudo apachectl configtest
sudo systemctl restart apache2
apache2.conf
Bei diesem File handelt es sich um den Konfigurationsfile für den HTTP Service.
# Diese Direktive gibt ein Verzeichnis an, in welchem der Apache2
# zur Laufzeit temporäre Dateien wie Shared Memory (shm) oder auch andere
# speichert.
# Die Angabe ${APACHE_RUN_DIR} bedeutet, dass hier eine Variable erwartet wird
# welche zuvor in der Konfiguration schon definiert wurde.
DefaultRuntimeDir ${APACHE_RUN_DIR}
Die Deklaration von [${APACHE_RUN_DIR}
findet sich in /etc/apache2/envvars
, einem File in welchem
Umgebungsvariablen (ENV: Environment) definiert werden.
Hinweis: Das /var/run/apache2
, welches
in der Konfiguration von Apache2 in der Variable [${APACHE_RUN_DIR}
zu finden ist, wird jedem Neustart von Apache2 überschrieben.
Jede Anwendung, die man für Linux programmiert, kann ein solches
/var/run/MEINPROGRAMM
Verzeichnis nutzen.
/etc/apache2/envvar
Die Umgebungsvariablen geben in der
Datei envvars
also Apache2-Laufzeit-Parameter an. Diese
werden von Apache2-Dienst-Programmen wie
apache2ctl
,
/etc/init.d/apache2
oder auch /etc/logrotate.d/apache2
verwendet.
# envvars - default environment variables for apache2ctl
export APACHE_RUN_DIR=/var/run/apache2
export APACHE_PID_FILE=$APACHE_RUN_DIR/apache2.pid
# andere Variablen
...
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ;
then SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else SUFFIX=
fi
...
Das APACHE_RUN_DIR
Verzeichnis ist das Verzeichnis, was zur Laufzeit
des Servers die temporären Files beinhaltet. Das
können mitunter auch sogenannte LOCK-Files sein
oder auch ein File, der die aktuelle Prozess-ID
benennt.
Um mehrere parallel laufenden Apache2 Services (auf verschiedenen Ports) unterstützen zu können, ist es wichtig, dass jede laufende Instanz anschließend einen Suffix bekommt.
export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
Diese Variablen definieren die Pfade für verschiedene Laufzeitdateien und Verzeichnisse. Der SUFFIX wird hinzugefügt, falls mehrere Apache2-Instanzen unterstützt werden sollen.
APACHE_PID_FILE
als Variable
verweist auf den Pfad zur PID-Datei für die Prozess-ID.
APACHE_RUN_DIR
verweist auf
das Verzeichnis für Laufzeitdateien. Diese werden beim Start von Apache
erzeugt und nach Ende von Apache gelöscht.
APACHE_LOCK_DIR
verweist auf
ein Verzeichnis mit Sperrdateien, auch Lock-Dateien genannt.
APACHE_LOG_DIR
verweist auf
das Verzeichnis in welchem Logdateien geschrieben werden.
Die Idee hinter diesen Variablen ist es, die Verwaltung und Konfiguration von Apache2 zu vereinfachen und sicherzustellen, dass alle Instanzen sauber voneinander getrennt sind. Denn man muss immer eines bedenken: Ist möglich, dass mehrere Apache-Instanzen zeitgleich auf verschiedenen Ports laufen. Es kann und darf also nicht passieren, dass zwei Apache-Instanzen die selben Ordner verwenden. Deshalb bekommt auch jede Instanz dieses Suffix.
FootNotes
UIO3 Es ist einfacher als Du denkst.
Stelle noch heute Deine Anfrage.