05 - Apache
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 tail ?
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://xyz
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.html
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