Rufen Sie uns an: +49 341 242 502 10

Ich war hier: ApacheKonfigurieren

Wiki source for ApacheKonfigurieren


Show raw source

===== 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 <paket>##
- 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 ""<sup>[1]</sup>""
##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
##""<VirtualHost>""##
Virtuelle Webseiten / Webserver ermöglichen mehrere Dienste auf einer Maschine. Dazu gelten folgende Empfehlungen:
- in einem ""<VirtualHost>"" 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 <Directory> die Konfiguration vornehmen:
%%(apache) <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>%%

((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
<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>%%




((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"
<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]##


----
[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/