Wir arbeiten aktuell an der Dokumentation der neuen Funktionalitäten von Moodle 5.2.

Nginx

Aus MoodleDocs
Wechseln zu:Navigation, Suche

Nginx [engine x] ist ein HTTP- und Reverse-Proxy-Server sowie ein Mail-Proxy-Server, der von Igor Sysoev geschrieben wurde. Das Nginx-Projekt begann mit einem starken Fokus auf hohe Parallelität, hohe Leistung und geringen Speicherverbrauch. Es ist unter einer 2-Klausel-BSD-ähnlichen Lizenz lizenziert und läuft unter Linux, BSD-Varianten, MacOSX, Solaris, AIX, HP-UX sowie anderen *nix-Varianten. Es gibt auch einen Proof-of-Concept-Port für Microsoft Windows.

Im Folgenden finden Sie von der Community beigesteuerte Dokumentationen zur Nginx-Konfiguration. Ergänzungen und Änderungen sind willkommen.

Nginx Konfiguration

PHP-FPM

Nginx ist in der Regel so konfiguriert, dass es über php-fpm mit PHP kommuniziert. Dies ist sowohl schnell als auch robust.

Das Standardverhalten von PHP-FPM für Pools besteht in der Regel darin, die Ausführung von Skripten auf eine bestimmte Erweiterung zu beschränken, z.B. .php. Sie sollten sicherstellen, dass dieses Verhalten in Ihrem jeweiligen Paket/Ihrer jeweiligen Distribution konfiguriert ist, z.B. für Debian

‚‘'/etc/php/7.4/fpm/pool.d/www.conf'‚‘

security.limit_extensions = .php

Nginx

Seit Version 4.5 verwendet Moodle sowohl Slash-Argumente als auch eine Routing-Engine.

Beides erfordert, dass Sie Ihren Server korrekt konfigurieren, um den Dateinamen korrekt zu splitten. Die Verwendung der Anweisung try_files kann ebenfalls die FastCGI-Konfiguration beeinträchtigen, wenn sie nicht richtig konfiguriert ist.

Wenn die Konfiguration fehlerhaft ist ist, treten Probleme wie fehlende Bilder und CSS auf.

FastCGI-Konfiguration

Die folgende Konfiguration funktioniert bekanntermaßen mit Moodle 4.5 und höher.

location ~ \.php(/|$) {
  # Teilen Sie die Pfadinformationen basierend auf der URI auf.
  fastcgi_split_path_info ^(.+\.php)(/.*)$;

  # Hinweis: Speichern Sie die ursprüngliche Pfadinformation. Sie wird in Kürze durch try_files gelöscht.
  set $path_info $fastcgi_path_info;

  # Suchen Sie nach der PHP-Datei. Wenn nicht gefunden, springen Sie zu @routed.
  try_files $fastcgi_script_name $fastcgi_script_name/;

  # Datei wurde gefunden – an fastcgi weiterleiten.
  fastcgi_pass   127.0.0.1:9000;
  include        fastcgi_params;

  # path_info nach Einfügen von fastcgi_params erneut anwenden.
  fastcgi_param PATH_INFO $path_info;
  fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
  fastcgi_param DOCUMENT_ROOT $realpath_root;
}

Routing-Engine

Wenn Ihre Moodle-Website vom DocumentRoot-Verzeichnis aus gehostet wird, können Sie die folgende Konfiguration verwenden, um Anfragen an die richtige Datei weiterzuleiten.

location / {
    try_files $uri $uri/ /r.php;
}

Wenn Ihre Moodle-Website in einem Unterverzeichnis gehostet wird, müssen Sie das Unterverzeichnis im Standortblock angeben.

location /moodle/ {
  try_files $uri $uri/ /moodle/r.php;
}

Interne Dateien verstecken

# Alle Dot-Dateien verstecken, aber „Well-Known URIs” gemäß RFC 5785 zulassen
location ~ /\.(?!well-known).* {
    return 404;
}
 
# Dies sollte nach der PHP-FPM-Regel und sehr nahe am letzten Nginx-Regelsatz stehen.
# Erlauben Sie keinen direkten Zugriff auf verschiedene interne Dateien. Siehe MDL-69333.
location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|/UPGRADING\.md|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
    deny all;
    return 404;
}


XSendfile alias X-Accel-Redirect

Die Einrichtung von Moodle und Nginx für die Verwendung der XSendfile-Funktionalität ist ein großer Gewinn, da PHP dadurch von der Bereitstellung von Dateien befreit wird und Nginx das tun kann, was es am besten kann, nämlich Dateien bereitstellen.

Aktivieren Sie xsendfile für Nginx in der Moodle-Konfigurationsdatei config.php. Dies ist in der config-dist.php dokumentiert. Eine minimale Konfiguration sieht wie folgt aus:

$CFG->xsendfile = 'X-Accel-Redirect';
$CFG->xsendfilealiases = array(
    '/dataroot/' => $CFG->dataroot
);

Fügen Sie dazu einen passenden location-Block in Ihre Nginx-Serverkonfiguration ein.

location /dataroot/ {
    internal;
    alias <full_moodledata_path>; # ensure the path ends with /
}

Die Definition von „intern” ist hier von entscheidender Bedeutung, da sie den Zugriff von Clients auf Ihren Datenstamm verhindert.

Hinweise zum Load Balancer (AWS)

Wenn Sie einen AWS Load Balancer in 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