05 - Apache

Zuletzt aktualisiert am 17. Januar 2024 3 Minuten

integrierten Apache entfernen

In OS-X integrierten Apache herunterfahren, alle automatisch ladenden Skripte entfernen.

sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/
org.apache.httpd.plist 2>/dev/null

Apache installieren

brew install httpd

DocumentRoot ist standardmässig /usr/local/var/www.

/usr/local/etc/httpd/httpd.conf
/usr/local/etc/httpd/extra/httpd-ssl.conf

apr ist keg-only, das bedeutet dass es nicht mit /usr/local durch einen Symlink verknüpft ist, da Apples CLT-Paket apr enthält. Wenn apr zuerst in PATH stehen soll:

echo 'export PATH="/usr/local/opt/apr/bin:$PATH"' >> ~/.bash_profile

Die Server Logs

codium /usr/local/var/log/httpd/error_log
codium /usr/local/var/log/httpd/access_log

Error Log beim Starten ausgeben

tail -f /usr/local/var/log/httpd/error_log

Was ist tailexternal link ?

Server Befehle

Apache sofort starten, und Service einrichten um ihn automatisch nach dem Login zu starten:

brew services start httpd

Apache manuell starten

apachectl start

Server restart (-k immediatly)

sudo apachectl -k restart

Apache stoppen

sudo apachectl stop

Konfiguration

Port

Prüfen ob Port 80 eingestellt ist? Die Konfiguratiosdatei kann bequem über das Terminal in VSCodium aufgerufen werden. Suche nach Listen und ersetzte ggfs. Port 8080 durch 80.

codium /usr/local/etc/httpd/httpd.conf

Apache User und Gruppen

Finden User www-data und ersetze durch User mein_username

Suche nach Group www-data und ersetze es durch Group staff

Der Apache läuft dann unter deinem User, was Rechte Probleme verhindert.

Listen 80
DocumentRoot /Volumes/mein_volume/develop/Apache2/Sites

AllowOverride All
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
User mein_username
Group staff
ServerName localhost

Module

LoadModule deflate_module lib/httpd/modules/mod_deflate.so

Virtuelle Hosts einrichten

codium /usr/local/etc/httpd/httpd.conf

LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
Include /usr/local/etc/httpd/extra/httpd-vhosts.conf

Edit codium /usr/local/etc/httpd/extra/httpd-vhosts.conf

DocumentRoot "/Volumes/mein_volume/develop/Apache2/Sites"
ServerName localhost

DocumentRoot "/Volumes/mein_volume/develop/Apache2/mein-projekt"
ServerName mein-projekt.test

Der Server sollte dann unter der Adresse http://mein-projekt.test erreichbar sein.

Setup SSL

codium /usr/local/etc/httpd/httpd.conf

Entferne # von

LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
Include /usr/local/etc/httpd/extra/httpd-ssl.conf

bearbeite die httpd-ssl.conf

codium /usr/local/etc/httpd/extra/httpd-ssl.conf

ändereListen 8443 zu Listen 443

finde <VirtualHost _default_:8443>

und ersetze…

<VirtualHost _default_:443>

kommentiere das aus……

# General setup for the virtual host
# DocumentRoot "/usr/local/var/www"
# ServerName www.example.com:443

um geeignete SSL-basierte virtuelle Hosts hinzuzufügen

codium /usr/local/etc/httpd/extra/httpd-vhosts.conf
DocumentRoot "/Users/mein_username/Sites"
ServerName localhost
SSLEngine on
SSLCertificateFile "/usr/local/etc/httpd/server.crt"
SSLCertificateKeyFile "/usr/local/etc/httpd/server.key"

Zertifikate

Damit SSL funktioniert, benötige ich ein Zertifikat.

tail -f /usr/local/var/log/httpd/error_log , um während des Serverneustarts um zu sehen ob Fehler auftreten.

Ich muss das selbstsigniertes Zertifikat erstellen, auf das ich bereits in der VirtualHost-Definition verwiesen habe.

Die folgenden Befehle fragen nach Informationen zum Zertifikat. Hier sollte ich sinnvolle Werte eintragen. Der ’ Common Name’ sollte mit dem ServerName in der httpd-vhosts.conf Datei übereinstimmen.

cd /usr/local/etc/httpd
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

Folgende Einträge:

Country Name (2 letter code) []:de
State or Province Name (full name) []:meinBundesland
Locality Name (eg, city) []: meineStadt
Organization Name (eg, company) []:mein_name
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []:localhost
Email Address []: meine_mail@gmx.de
sudo apachectl configtest
sudo apachectl -k restart

Im Browser https://localhost aufrufen und sehen was passiert.

Mod expires Fehlermeldung

Ungültiger Befehl ‘ExpiresActive’, möglicherweise falsch geschrieben oder durch ein Modul definiert, das nicht in der Serverkonfiguration enthalten ist, siehe: http://xyzexternal link

Wenn diese Meldung auf deiner Apache-Installation in Verbindung mit einer 500 Internal Server Error-Meldung auftaucht, bedeutet das, dass du den Befehl ExpiresActive in einer .htaccess-Datei oder in der Datei apache2.conf (oder httpd.conf) verwendet hast, ohne das Expires-Modul mit einzubeziehen.

https://httpd.apache.org/notes/current/mod/mod_expires.htmlexternal link

LoadModule expires_module lib/httpd/modules/mod_expires.so

DocumentRoot ändern

Suche in den drei folgenden Dateien nach DocumentRoot und in einem Fall nach Directory und passe den Pfad an.

codium /usr/local/etc/httpd/httpd.conf
codium /usr/local/etc/httpd/extra/httpd-ssl.conf
codium /usr/local/etc/httpd/extra/httpd-vhosts.conf

Danach den Server neu durchstarten

sudo apachectl -k restart