Beste Möglichkeit, statischen Dateianforderungen eine Authentifizierungsebene hinzuzufügen?

Beste Möglichkeit, statischen Dateianforderungen eine Authentifizierungsebene hinzuzufügen?

Ich versuche herauszufinden, wie ich den Anforderungen für statische Assets auf meinem Server am besten eine Authentifizierungsprüfung hinzufügen kann.

Ich verwende Apache 2.4 und PHP/Laravel. Dabei wird statischer Inhalt direkt bereitgestellt und die dynamischen Routen DocumentRootwerden über die Schnittstelle verwaltet .index.php

Ich habe gesucht und ein paar Optionen gefunden, bin mir aber nicht sicher, welche Vorgehensweise am besten und effizientesten ist:


1) Erstellen und setzen Sie einen ActionHandler in Apache, um ein CGI-Skript aufzurufen, das statische Inhalte bereitstellt. Dieses Skript öffnet für jede Anfrage eine DB-Verbindung, prüft die Zugriffskontrollrechte und gibt eine 301-Antwort zurück oder stellt den Inhalt bereit. Ich denke, dass die Leistung dadurch stark beeinträchtigt wird, da für jede Anfrage eine neue DB-Verbindung geöffnet wird.

Ich habe versucht hinzuzufügen:

Action serve-static /var/www/file-server.py
AddHandler serve-static .js .css

zum <Directory>Block, aber das führte dazu, dass alle CSS/JS 404 zurückgaben.


2) Verwenden Sie eine Kombination aus mod_rewriteund , mod_proxyum alle Anfragen für statische Dateien an einen anderen Anwendungsserver weiterzuleiten (oder die Last auf mehrere Server zu verteilen), der bereits eine offene DB-Verbindung hätte, führen Sie eine Authentifizierungsprüfung durch und stellen Sie die Datei entsprechend zurück. Meine Sorge bei diesem Ansatz ist, dass Apache meiner Meinung nach zu einem Engpass beim Downlink zurück zum Client werden könnte?

Ich beginne mit einem <Directory /var/www/html/app/public>Block, der die gesamte Anwendung enthält

Ich bin nicht sehr vertraut mit mod_rewriteund mod_proxy, also denke ich, ich könnte etwas wie

<Directory /var/www/html/app/public/static>
    RewriteEngine  on
    RewriteRule    "(.*)$"  "http://fileserver/$1"  [P]
    ProxyPassReverse "/public/static" "http://fileserver/"
</Directory>

Ich kann dies jedoch nicht dazu bringen, Anfragen an die Dateiserverebene weiterzuleiten, um auch nur die Effizienz zu testen.


Ich wäre für jede Einsicht dankbar!

Antwort1

Wenn sich der statische Inhalt bereits auf dem Webserver befindet, beginnen Sie einfach. Überspringen Sie (vorerst) das CGI-Skript, den Proxy, das Umschreiben der URL und das Caching.

Verwenden Sie in einer Verzeichnisdirektive für statische DatenAuthentifizierungsmodule von httpdum das zu sperren. Sie implizieren eine DB-Verbindung, d. h. mod_authn_dbd und mod_authz_dbm, und verlangen, dass Ihre Datenbank über von den Modulen unterstützte Passwort-Hashes verfügt.

Irgendwann werden Sie Caching benötigen, mehrere DB-Abfragen pro Dokument funktionieren nicht gut. Eine Apache-Implementierung istmod_authn_socache, und es kann Authentifizierungen in seinen gemeinsam genutzten Objektcache stopfen, der durch gemeinsam genutzten Speicher, Memcached und mehr unterstützt werden kann.

Sie könnten ein ähnliches Caching im Rahmen Ihrer Web-App durchführen. Das ist eine Übung für den Leser, da es mehr Entwicklung ist als die Konfiguration eines Webservers.

verwandte Informationen