===== Apache ===== == Konfiguration des Webservers am Beispiel v. 2.4 - einschließlich anderer FAMP-Funktionen == ((1)) Welche Pakete sind notwendig Mit PKG sollen insbesondere folgende installiert werden: ## pkg install ## - apache - php-fpm - php-xxx ((1)) 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## ((1)) 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... ((2)) 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: %%(apache) ""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!// ((1)) Virtual Hosts ##""""## 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: %%(apache) ServerName vhost1 CustomLog /pfad/zu/logs/vhost1_log combined ErrorLog /pfad/zu/logs/vhost1_errorlog%% ((1)) ""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## ((1)) 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... ((2)) 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## ((2)) Konfiguration der entsprechenden Verzeichnisse Am besten unter der Anweisung die Konfiguration vornehmen: %%(apache) (Einstellungen wie sonst) ... AuthType Basic AuthName "Restricted Files" # (Following line optional) AuthBasicProvider file AuthUserFile "/usr/local/pfad/zu/passwordfile" Require user username %% ((2)) Einige ältere Informationen zum Thema Bezogen auf PHPmyAdmin: - add module "digest" to ##/etc/apache2/mods-enabled/## - edit ##/etc/phpmyadmin/apache.conf##: ##AuthType Digest ... ## ((3)) benötigte Module ##ln -s auth_digest.load## in ##/etc/apache2/mods-enabled/## ((3)) virtual hosts konfigurieren edit ##/etc/apache2/sites-enabled/XXXX.conf## %%(apache) Alias /path-in-browser /path/on/localfilesystem Options FollowSymLinks DirectoryIndex index.php AuthType Digest AuthName "your_realm" AuthUserFile /path/to/filewithdigestpwd Require valid-user %% ((1)) 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. Für die automatische Aktualisierung mit ##certbot## in folgender Umgebung: - TrueNAS jail (FreeBSD) - apache als Webserver brauchen wir: - script, mit dem Webserver ausgeschaltet wird und certbot-renew erfolgt Also konkret: %%(bash) #!/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 ; %% - dieses script in crontab packen ##crontab -e## ##44 4 * * 6 /path/where/script/is/letsencrypt_renew.sh## => jeden Samstag um 4:44 Uhr prüfen! ((1)) WebDav in Apache einrichten == modules to load in httpd.conf == ##""LoadModule"" dav_module mod_dav.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## == host config in the httpd == %%(apache) Alias /youralias "/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] %% == 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]## ---- [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/