Inhaltsverzeichnis des Artikels
A. Welche Pakete sind notwendig
B. Einzelne PHP-module
C. Konfiguration für PHP mit F...
1. PHP-FPM Konfiguration
2. Module in httpd.conf
D. Virtual Hosts
E. phpMyAdmin
F. Zugrifssbeschränkungen
1. Notwendige Module
2. Passwörter festlegen und sp...
3. Konfiguration der entsprech...
4. Einige ältere Informationen...
a. benötigte Module
b. virtual hosts konfigurieren
G. SSL Zertifikat mit Let's En...
H. WebDav in Apache einrichten
B. Einzelne PHP-module
C. Konfiguration für PHP mit F...
1. PHP-FPM Konfiguration
2. Module in httpd.conf
D. Virtual Hosts
E. phpMyAdmin
F. Zugrifssbeschränkungen
1. Notwendige Module
2. Passwörter festlegen und sp...
3. Konfiguration der entsprech...
4. Einige ältere Informationen...
a. benötigte Module
b. virtual hosts konfigurieren
G. SSL Zertifikat mit Let's En...
H. WebDav in Apache einrichten
Apache
Konfiguration des Webservers am Beispiel v. 2.4 - einschließlich anderer FAMP-Funktionen
A. Welche Pakete sind notwendig
Mit PKG sollen insbesondere folgende installiert werden:
pkg install <paket>
- apache
- php-fpm
- php-xxx
B. Einzelne PHP-module
Welche sind installiert (auch fest einkompiliert)?
Befehl:
php -m
Wir haben folgende genommen (die meisten wegen nextcloud):
[PHP Modules]
apcu
bcmath bz2
Core ctype curl
date dom
exif
fileinfo filter
gd gmp hash
iconv imagick intl json
ldap libxml mbstring
mysqli mysqlnd openssl
pcre PDO pdo_mysql
posix redis Reflection
session SimpleXML SPL standard
xml xmlreader xmlwriter xsl
Zend OPcache zip zlib
[Zend Modules]
Zend OPcache
Wir haben folgende genommen (die meisten wegen nextcloud):
[PHP Modules]
apcu
bcmath bz2
Core ctype curl
date dom
exif
fileinfo filter
gd gmp hash
iconv imagick intl json
ldap libxml mbstring
mysqli mysqlnd openssl
pcre PDO pdo_mysql
posix redis Reflection
session SimpleXML SPL standard
xml xmlreader xmlwriter xsl
Zend OPcache zip zlib
[Zend Modules]
Zend OPcache
C. Konfiguration für PHP mit FPM [1]
mod_php soll nicht so sicher und nicht so performant sein. Also versuchen wir, PHP mit FPM (Fast CGI proxy) zu betreiben...
1. PHP-FPM Konfiguration
Konfigurationsdateien:
/usr/local/etc/php-fpm.conf (aber diese ist nicht so interessant...);
dafür diese:
/usr/local/etc/php-fpm.d/www.conf
edit:
listen = /tmp/php-fpm.sock
listen.owner = www
listen.group = www
2. Module in httpd.conf
In der config von apache (/etc/apache2/ unter Linux oder /usr/local/etc/apache24/ unter Freebsd) sollten folgende Module aktiviert werden:
""LoadModule"" mpm_event_module libexec/apache24/mod_mpm_event.so
#""LoadModule"" mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#""LoadModule"" mpm_worker_module libexec/apache24/mod_mpm_worker.so
""LoadModule"" proxy_module libexec/apache24/mod_proxy.so
""LoadModule"" proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
nur mpm_event_module soll aktiviert sein - keine weiteren mpms!#""LoadModule"" mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
#""LoadModule"" mpm_worker_module libexec/apache24/mod_mpm_worker.so
""LoadModule"" proxy_module libexec/apache24/mod_proxy.so
""LoadModule"" proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
Virtuelle Webseiten / Webserver ermöglichen mehrere Dienste auf einer Maschine. Dazu gelten folgende Empfehlungen:
- in einem
sollte die Direktive ServerName genutzt werden - sonst wird das ganze System der virtuellen Hosts nicht sinnvoll funktionieren; - separate logs je host laufen so:
ServerName vhost1
CustomLog /pfad/zu/logs/vhost1_log combined
ErrorLog /pfad/zu/logs/vhost1_errorlog
CustomLog /pfad/zu/logs/vhost1_log combined
ErrorLog /pfad/zu/logs/vhost1_errorlog
E. phpMyAdmin
Das Tool funktioniert, wenn PHP richtig eingerichtet ist - insbesondere PHP-FPM muss laufen - und die Einstellungen auch sonst korrekt sind.
Mit mySQL 8.0 und PHP 7.4 war die Anmeldung anfangs nicht möglich. Dagegen hat geholfen:
- mysql -u root -p
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypwd';
- exit
F. Zugrifssbeschränkungen
Wenn ein Verzeichnis auf dem Webserver mit einem Passwort geschützt werden soll, kann dies mit Apache eingerichtet werden. Früher setzte ich auf Digest-Authentication, aber diese ist gar nicht so sicher und aktuell muss man eh jede Seite mit SSL ausstatten. Deshalb ist die Basic-Authentication per SSL genauso gut...
1. Notwendige Module
Für die basic-authentication / authorization brauchen wir:
- Authentication type: mod_auth_basic (auth-type)
- Authentication provider: mod_authn_file (auth-basic-provider)
- Authorization: mod_authz_groupfile / mod_authz_user
- und in jedem Fall auch: mod_authn_core + mod_authz_core
2. Passwörter festlegen und speichern
htpasswd -c /usr/local/pfad/zu/passwordfile username
3. Konfiguration der entsprechenden Verzeichnisse
Am besten unter der Anweisung <Directory> die Konfiguration vornehmen:
<Directory "/usr/local/hier/nur/mit/anmeldung">
(Einstellungen wie sonst)
...
AuthType Basic
AuthName "Restricted Files"
# (Following line optional)
AuthBasicProvider file
AuthUserFile "/usr/local/pfad/zu/passwordfile"
Require user username
<Directory>
(Einstellungen wie sonst)
...
AuthType Basic
AuthName "Restricted Files"
# (Following line optional)
AuthBasicProvider file
AuthUserFile "/usr/local/pfad/zu/passwordfile"
Require user username
<Directory>
4. Einige ältere Informationen zum Thema
Bezogen auf PHPmyAdmin:
- add module "digest" to /etc/apache2/mods-enabled/
- edit /etc/phpmyadmin/apache.conf:
a. benötigte Module
ln -s auth_digest.load in /etc/apache2/mods-enabled/
b. virtual hosts konfigurieren
edit /etc/apache2/sites-enabled/XXXX.conf
Alias /path-in-browser /path/on/localfilesystem
<Directory /path/on/localfilesystem>
Options FollowSymLinks
DirectoryIndex index.php
<IfModule mod_authn_file.c>
AuthType Digest
AuthName "your_realm"
AuthUserFile /path/to/filewithdigestpwd
</IfModule>
Require valid-user
</Directory>
<Directory /path/on/localfilesystem>
Options FollowSymLinks
DirectoryIndex index.php
<IfModule mod_authn_file.c>
AuthType Digest
AuthName "your_realm"
AuthUserFile /path/to/filewithdigestpwd
</IfModule>
Require valid-user
</Directory>
G. SSL Zertifikat mit Let's Encrypt
Folgende Anleitung haben wir genutzt:
https://certbot.eff.org/lets-encrypt/freebsd-apache.html
=> mit dem Unterschied, dass wir py37-certbot (statt py36-certbot) installieren mussten;
Aktualisierte Anleitung (falls die oben nicht auffindbar):
=> https://certbot.eff.org/instructions?ws=apache&os=freebsd
(im Juli 2022 war dann auch schon neuere Python-Version: also py38-certbot)
Nachdem das Skript durch war wurden die Zertifikatsdateien eingebunden in /usr/local/etc/apache24/httpd.conf:
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/domain.tld/privkey.pem"
Und zwar in jedem Virtual Host.SSLCertificateFile "/usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/domain.tld/privkey.pem"
Für die automatische Aktualisierung mit certbot in folgender Umgebung: brauchen wir:
- script, mit dem Webserver ausgeschaltet wird und certbot-renew erfolgt
#!/bin/sh
LOG_FILE=/path/where/logfile/is/letsencrypt_log ;
date >> $LOG_FILE ;
echo "stop apache" >> $LOG_FILE ;
service apache24 stop >> $LOG_FILE ;
echo "renew certificates" >> $LOG_FILE ;
certbot renew >> $LOG_FILE ;
echo "start apache again" >> $LOG_FILE ;
service apache24 start >> $LOG_FILE ;
echo "if no error to see - operation succesful" >> $LOG_FILE ;
LOG_FILE=/path/where/logfile/is/letsencrypt_log ;
date >> $LOG_FILE ;
echo "stop apache" >> $LOG_FILE ;
service apache24 stop >> $LOG_FILE ;
echo "renew certificates" >> $LOG_FILE ;
certbot renew >> $LOG_FILE ;
echo "start apache again" >> $LOG_FILE ;
service apache24 start >> $LOG_FILE ;
echo "if no error to see - operation succesful" >> $LOG_FILE ;
- dieses script in crontab packen
44 4 * * 6 /path/where/script/is/letsencrypt_renew.sh => jeden Samstag um 4:44 Uhr prüfen!
H. WebDav in Apache einrichten
modules to load in httpd.conf
LoadModule dav_module mod_dav.so
LoadModule dav_fs_module mod_dav_fs.so
LoadModule dav_fs_module mod_dav_fs.so
folder and permissions
mkdir /my_path_for_webserver_data/webdav
sudo chown _www:_www /my_path_for_webserver_data/webdav
sudo chown _www:_www /my_path_for_webserver_data/webdav
host config in the httpd
Alias /youralias "/path/to/webdav/foldername"
<Directory "/path/to/webdav/foldername">
Dav On
Order Allow,Deny
Allow from all
AuthType Digest
AuthName [realm]
AuthUserFile "/path/to/file/file.name"
AuthDigestProvider file
require user [username]
</Directory>
<Directory "/path/to/webdav/foldername">
Dav On
Order Allow,Deny
Allow from all
AuthType Digest
AuthName [realm]
AuthUserFile "/path/to/file/file.name"
AuthDigestProvider file
require user [username]
</Directory>
create passwords for login
htdigest "/path/to/file/file.name" [realm] [username]
if no password file existent:
htdigest -c "/path/to/file/file.name" [realm] [username]
if no password file existent:
htdigest -c "/path/to/file/file.name" [realm] [username]
[1] Gute Quelle zum Thema Apache / FreeBSD / PHP-FPM: https://medium.com/@clpo13/apache-and-php-fpm-on-freebsd-a41e832ae8cc.
[2] Falls eine Abkürzung gewünscht ist und gar nichts verstanden werden muss - es geht auch recht schnell mit Caddy 1.0 mit diesem Skript: https://www.ixsystems.com/community/resources/scripted-installation-of-nextcloud-19-in-iocage-jail.90/
Auf dieser Seite sind keine Kommentare vorhanden