Apache
Dieser Artikel bezieht sich auf den „Apache HTTP Server“.
Der Apache HTTP Server ist die Software, die (zusammen mit der Skriptsprache PHP) Moodle „ausführt“. Beachten Sie, dass es Alternativen gibt (z. B. IIS unter Windows, Nginx unter Linux, MacOS), aber der Apache HTTP Server ist auf allen Plattformen sehr beliebt.
Installation von Apache
Installationsprogramme sind für die meisten Plattformen unter http://httpd.apache.org/download.cgi verfügbar. Die offiziellen Installationsanweisungen finden Sie hier: http://httpd.apache.org/docs/2.0/install.html. Wenn Sie Linux verwenden, wird empfohlen, nach Möglichkeit die Paketversion zu verwenden. In Debian/Ubuntu lautet der Befehl beispielsweise einfach:
sudo apt-get install apache2
Die Anweisungen finden Sie in der Dokumentation für Ihre jeweilige Plattform. Apache lässt sich bei Bedarf ganz einfach aus dem Quellcode kompilieren. Die PHP-Dokumentation enthält einen Artikel zum gemeinsamen Kompilieren von Apache und PHP – allerdings dürfte dies nur in seltenen Fällen erforderlich sein.
Geschwindigkeit
Siehe Geschwindigkeitsempfehlungen.
Routing
Seit Moodle 4.5 ist eine Routing-Engine in Moodle enthalten. Diese muss konfiguriert werden, um Anfragen mit der Anweisung FallbackResource zu bearbeiten:
DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public>
AllowOverride None
Require all granted
FallbackResource /r.php
</Directory>
Die FallbackResource ist relativ zum DocumentRoot-Verzeichnis der Website. Befindet sich Ihr Moodle in einem Unterverzeichnis, müssen Sie die gesamte URL angeben:
DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public/moodle>
AllowOverride None
Require all granted
FallbackResource /moodle/r.php
</Directory>
Slash-Parameter
Slash-Parameter sind erforderlich, damit verschiedene Funktionen in Moodle korrekt funktionieren, wie unter Verwendung von Slash-Parametern beschrieben.
Um sie zu aktivieren, fügen Sie diese Zeile zu Ihrer httpd.conf oder zu einer .htaccess-Datei in Ihrem lokalen Verzeichnis hinzu:
AcceptPathInfo On
Hinweis: Wenn Sie .htaccess in Ihrem lokalen Moodle-Installationsordner verwenden, müssen Sie möglicherweise zuerst eine AllowOverride Directive in der httpd.conf einfügen/aktivieren.
Hinweis: Die Verwendung einer .htaccess-Datei beeinträchtigt die Leistung Ihres Servers!
Wenn Sie das Shared Webhosting von Ionos (ehemals 1&1) verwenden, funktioniert das oben Genannte nicht, da es einen bekannten Fehler bei der Verwendung von PHP als CGI gibt. Die Lösung besteht darin, im Moodle-Verzeichnis eine Datei php.ini mit folgendem Inhalt zu erstellen:
cgi.fix_pathinfo = 0
Außerdem verlangt Ionos, dass diese php.ini in jedem Verzeichnis vorhanden ist, in dem ein Skript ausgeführt wird. Verwenden Sie das folgende Verfahren, um eine php.ini in jedem Unterverzeichnis mit Ihrer ursprünglichen php.ini-Datei zu verknüpfen.
cd Ihr_Moodle-Verzeichnis
find -type d -exec ln -s $PWD/php.ini {}/php.ini \;
Quelle: Ionos php.ini-Hilfe
Dies kann auch Auswirkungen auf andere Shared-Hosting-Anbieter haben.
Behandlung von 40x-Fehlern
Dadurch können fehlende Dateien von Moodle thematisiert werden:
ErrorDocument 404 /error/index.php # Dadurch werden alle 403-Fehler von Apache an dieselbe Seite weitergeleitet, aber auch # der HTTP-Status wird aus Sicherheitsgründen durch 404 überschrieben. ErrorDocument 403 /error/index.php?code=404
Interne Pfade ausblenden
Aktivieren Sie mod_rewrite (unter Ubuntu erforderlich) und starten Sie Apache neu.
sudo a2enmod rewrite
sudo systemctl restart apache2
RewriteEngine On RewriteRule "(\/vendor\/)" - [F] RewriteRule "(\/node_modules\/)" - [F] RewriteRule "(^|/)\.(?!well-known\/)" - [F] RewriteRule "(composer\.json)" - [F] RewriteRule "(\.lock)" - [F] RewriteRule "(\/environment.xml)" - [F] Options -Indexes RewriteRule "(\/install.xml)" - [F] RewriteRule "(\/README)" - [F] RewriteRule "(\/readme)" - [F] RewriteRule "(\/moodle_readme)" - [F] RewriteRule "(\/upgrade\.txt)" - [F] RewriteRule "(\/UPGRADING\.md)" - [F] RewriteRule "(phpunit\.xml\.dist)" - [F] RewriteRule "(\/tests\/behat\/)" - [F] RewriteRule "(\/fixtures\/)" - [F]
Hinweis: Bitte beachten Sie, dass die oben genannten Regeln das Laden gewünschter/erforderlicher Inhalte blockieren können, z. B. SCORM-Pakete, die ein „vendor”-Verzeichnis enthalten.
SSL
Moodle bietet die Möglichkeit, HTTPS für die gesamte Website oder nur für die Anmeldeseiten zu aktivieren. Für beide Optionen muss Ihr Webserver für SSL konfiguriert sein.
- HTTPS für die gesamte Website wird aktiviert, indem Sie in Ihrer config.php den Parameter wwwroot von http:// in https:// ändern.
- HTTPS nur für die Anmeldung wird durch Setzen des Parameters loginhttps aktiviert, wobei das wwwroot-Schema http:// bleiben sollte.
Hinweis: HTTPS nur für die Anmeldung wurde in Moodle 3.4 als veraltet markiert und entfernt: siehe MDL-42834.
Um HTTPS zu verwenden, benötigen Sie ein SSL-Zertifikat. Dazu haben Sie zwei Möglichkeiten:
- Erstellen Sie ein selbstsigniertes Zertifikat. Dies ist beispielsweise für ein Intranet in Ordnung, für das öffentliche Internet jedoch ungeeignet, da Nutzer/innen bei öffentlicher Nutzung gewarnt werden, dass das Zertifikat nicht vertrauenswürdig ist.
- Kaufen Sie ein Zertifikat von einem Anbieter. Es gibt eine überraschende Bandbreite an Preisen und Mehrwertdiensten. Einige Hosting-Unternehmen bieten sogar kostenlose Zertifikate an.
Debian bietet Anweisungen zur Installation eines selbstsignierten Zertifikats auf ihrem Wiki und enthält allgemeine Informationen zur Konfiguration von Apache für SSL. Wenn Sie ein Zertifikat von einem Anbieter erwerben, erhalten Sie in der Regel Anweisungen zur Installation.
Eine grundlegende Apache-SSL-Konfiguration lässt sich wie folgt zusammenfassen:
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /path/to/your/certificate.crt
SSLCertificateKeyFile /path/to/your/certificate.key
...
</VirtualHost>
Hinweise zum Load Balancer (AWS)
Wenn Sie einen AWS Load Balancer vor Ihrer Infrastruktur verwenden, können Sie einige der oben genannten Konfigurationen einrichten, um zu verhindern, dass Datenverkehr weitergeleitet wird. Hier ist die Konfiguration zum Ausblenden von Dateien, wobei aufgrund bekannter Einschränkungen einige Punkte zu beachten sind:
- Insgesamt 100 Regeln pro Anwendungs-Load Balancer
- 5 Bedingungswerte pro Regel
- 5 Platzhalter pro Regel
- 5 gewichtete Zielgruppen pro Regel:
[
{
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"*/.*",
"*/upgrade.txt",
"*/db/install.xml",
"*/README.md"
],
"PathPatternConfig": {
"Values": [
"*/.*",
"*/upgrade.txt",
"*/db/install.xml",
"*/README.md"
]
}
}
],
"Actions": [
{
"Type": "fixed-response",
"Order": 1,
"FixedResponseConfig": {
"ContentType": "text/html",
"MessageBody": "<html>\n<head><title>404 Not Found</title></head>\n<body>\n<center><h1>404 Not Found</h1></center>\n<hr>\n</body>\n</html>",
"StatusCode": "404"
}
}
]
},
{
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"*/composer.json",
"*/Gruntfile.js",
"*.lock",
"*/environtment.xml",
"*/readme.txt"
],
"PathPatternConfig": {
"Values": [
"*/composer.json",
"*/Gruntfile.js",
"*.lock",
"*/environtment.xml",
"*/readme.txt"
]
}
}
],
"Actions": [ #### Wie oben
...
]
},
{
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"*/fixtures/*",
"*/behat/*",
"*/phpunit.xml"
],
"PathPatternConfig": {
"Values": [
"*/fixtures/*",
"*/behat/*",
"*/phpunit.xml"
]
}
}
],
"Actions": [ #### Wie oben
...
]
}
]