Apache

Aus MoodleDocs
Wechseln zu:Navigation, Suche


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
            ...
        ]
    }
]

Siehe auch