Ubuntu 16.04 / Apache / Wie man den Zugriff auf den javascript-Ordner behebt

Wenn beim Zugriff auf /javascript/ in Apache unter Ubuntu ein 403 Forbidden erscheint, prüfen Sie, ob der von dem javascript-common-Paket erstellte Apache-Alias mit dem Pfad der Website in Konflikt steht. 403-Fehler können jedoch auch durch Berechtigungen oder Einstellungen der Verzeichnisauflistung auftreten, daher sollten Sie die tatsächliche Dateireaktion und die Servereinstellungen zusammen prüfen, bevor Sie Maßnahmen ergreifen.

Dinge, die zuerst überprüft werden sollten

Dieser Artikel basiert auf einer Umgebung mit Apache 2.4 unter Ubuntu. Der ursprüngliche Artikel behandelte Ubuntu 16.04 LTS, eine alte Version, deren standardmäßige Unterstützung und allgemeine Ubuntu Pro-Unterstützung beendet sind. Überprüfen Sie die Bedingungen für zusätzlichen Legacy-Support und planen Sie die Migration auf eine unterstützte Version. Den Support-Zeitplan können Sie unter Ubuntu Security Maintenance Schedule einsehen.

Das Problem, beim Öffnen nur der /javascript/-Ordneradresse im Browser ein 403 zu sehen und die darin enthaltenen JavaScript-Dateien nicht laden zu können, sind unterschiedliche Probleme. Wenn sich keine Standard-Indexdatei im Verzeichnis befindet und das Verzeichnislisting deaktiviert ist, kann die Ordneradresse 403 zurückgeben, aber einzelne Dateien können weiterhin normal bereitgestellt werden.

Überprüfen Sie die URL und den Statuscode der Datei, die tatsächlich im Netzwerk-Tab der Entwicklertools des Browsers fehlgeschlagen ist. Prüfen Sie zum Beispiel, ob /javascript/app.js, auf die von der Website verwiesen wird, 200, 403 oder 404 zurückgibt, und inspizieren Sie auch den Antwortinhalt. Selbst wenn 200 angezeigt wird, kann anderer Inhalt als die beabsichtigte JavaScript-Datei zurückgegeben werden.

Was ist ein Alias-Konflikt?

In einigen Ubuntu- und Debian-Umgebungen kann die aktive javascript-common-Konfiguration Aliase wie die folgenden enthalten. Wenn diese Konfiguration angewendet wird, kann der URL-Pfad /javascript auf ein anderes Verzeichnis als das unter dem Dokumentstamm der Website verweisen.

Alias /javascript /usr/share/javascript/

Zum Beispiel, wenn Apache nach dem angeforderten /javascript/app.js unter /usr/share/javascript/ sucht, können Dateien im ursprünglichen Website-Ordner möglicherweise nicht bereitgestellt werden. Wenn die Zieldatei nicht existiert, kann ein 404 erscheinen, und wenn der Zugriff auf das Ziel verweigert wird oder ein Verzeichnislisting nicht erlaubt ist, kann ein 403 erscheinen. Schließen Sie nicht allein aufgrund des Statuscodes auf einen Alias-Konflikt.

Dieser Alias bezieht sich auf Anfragen, bei denen das erste Pfadsegment der URL /javascript ist. Nicht alle javascript-Ordner unter anderen Segmenten, wie /assets/javascript/app.js, entsprechen automatisch diesem Alias. Die tatsächliche Zuordnung und Priorität kann je nach virtuellen Hosts, anderen Aliases, Weiterleitungen und Umschreiberegeln variieren. Sie können die Pfadübereinstimmung und die Verarbeitungsreihenfolge in der Apache-Alias-Dokumentation überprüfen.

Überprüfen Sie die aktiven Einstellungen und Fehlerprotokolle

Verbinden Sie sich mit dem Server, um die Apache-Version und die virtuellen Hosts zu überprüfen. Die folgenden Suchen finden relevante Zeichenfolgen in den Konfigurationsverzeichnissen, und nicht verwendete Einstellungen können ebenfalls in den Ergebnissen erscheinen.

apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i javascript /etc/apache2

Wenn /etc/apache2/conf-available/javascript-common.conf in den Ergebnissen erscheint, überprüfen Sie deren Inhalt und stellen Sie fest, ob sie tatsächlich aktiviert und mit /etc/apache2/conf-enabled/ verknüpft ist. Überprüfen Sie auch host-spezifische Einstellungen und andere URL-Regeln. Wenn die Datei fehlt oder das Alias deaktiviert ist, gehen Sie nicht davon aus, dass diese Einstellung die Ursache ist.

ls -l /etc/apache2/conf-enabled/javascript-common.conf
sudo cat /etc/apache2/conf-available/javascript-common.conf

Wenn Sie eine Nachricht erhalten, dass die Datei oder der symbolische Link nicht existiert, dann ist die Installation oder der aktive Zustand anders. Überprüfen Sie die Apache-Fehlerprotokolle zum Zeitpunkt der Anfrage, um den tatsächlichen Pfad und die gefundenen Fehler zu sehen. In Ubuntus Standardkonfiguration kann /var/log/apache2/error.log verfügbar sein, aber die Protokollpfade können für jeden virtuellen Host unterschiedlich sein.

sudo tail -n 50 /var/log/apache2/error.log

Wählen Sie eine Lösungsmethode

Wenn es möglich ist, den Dateipfad auf der Website zu ändern, verwenden Sie einen Pfad wie /assets/js/, der nicht mit dem Alias überschneidet, und ändern Sie zudem die HTML script-Adresse und die Build-Einstellungen. Wenn es Seiten, Caches oder externe Links gibt, die die bestehende Adresse verwenden, prüfen Sie die Auswirkungen der Änderung und fordern Sie die tatsächlichen Dateien nach der Bereitstellung erneut an. Wenn Sie den Ordner einfach umbenennen, während die Verweise unverändert bleiben, können bestehende Seiten die Datei nicht finden.

Wenn Sie die bestehende /javascript-Adresse beibehalten müssen, kann der Serveradministrator die Abhängigkeiten aller virtuellen Hosts und Pakete überprüfen, bevor er das Alias ändert oder deaktiviert. Das Deaktivieren der javascript-common-Einstellung kann auch Adressen ändern, die von anderen Websites oder Paketen verwendet werden. Untersuchen Sie daher zunächst die Auswirkungen und bereiten Sie Wiederherstellungsmaßnahmen vor. Das direkte Bearbeiten der Paketkonfigurationsdatei kann die Verwaltung während Paketaktualisierungen erschweren.

Die folgenden Optionen stehen zur Verfügung, wenn Sie bestätigt haben, dass die Einstellung aktiviert ist und von anderen Diensten nicht verwendet wird. Dieser Befehl kann die gesamte Apache-Konfiguration des Servers beeinflussen. Wenn die Syntaxprüfung nach der Ausführung fehlschlägt, laden Sie nicht neu; lösen Sie zuerst die Ursache oder aktivieren Sie die Konfiguration erneut.

sudo a2disconf javascript-common
sudo apache2ctl configtest

Laden Sie die Konfiguration nur neu, wenn die Syntaxprüfung Syntax OK bestätigt. Der Dienstname kann je nach Umgebung variieren.

sudo systemctl reload apache2

Um zurückzukehren, aktivieren Sie die Einstellung mit den folgenden Befehlen erneut und laden Sie sie nur neu, wenn die Syntaxprüfung erfolgreich ist.

sudo a2enconf javascript-common
sudo apache2ctl configtest && sudo systemctl reload apache2

Prüfen Sie nach Änderungen und anderen Ursachen

Fordern Sie erneut die genaue Datei-URL an, die vor der Änderung fehlgeschlagen ist, und überprüfen Sie den Statuscode und den Dateiinhalt. Löschen Sie den Browser-Cache oder stellen Sie Ihre Entwicklertools so ein, dass der Cache nicht verwendet wird, und prüfen Sie dann die Netzwerk-Anfragen und Konsolenfehler auf der Seite. Überprüfen Sie auch andere Websites oder Pakete, die den vorhandenen /javascript-Pfad verwendet haben.

Wenn das Alias nicht die Ursache ist oder 403 nach der Änderung weiterhin besteht, überprüfen Sie die Zugriffsregeln von Apache Directory·Location, die Lese- und übergeordneten Verzeichnisberechtigungen, die Einstellungen für symbolische Verknüpfungen sowie die Standard-Indexdateien und Richtlinien zur Verzeichnisauflistung. Erlauben Sie nicht wahllos allen Zugriff oder aktivieren Sie die Verzeichnisauflistung, um den Fehler zu beseitigen, da dies Dateien öffentlich machen könnte, die Sie nicht veröffentlichen möchten; überprüfen Sie stattdessen zuerst die tatsächlich erforderlichen Dateien und Richtlinien.