Лучший способ добавить уровень аутентификации к статическим запросам файлов?

Лучший способ добавить уровень аутентификации к статическим запросам файлов?

Я пытаюсь найти наилучший способ добавить проверку подлинности к запросам статических ресурсов на моем сервере.

Я использую Apache2.4 и PHP/Laravel, которые работают, обслуживая статический контент непосредственно из DocumentRootи входя в index.phpдля обработки динамических маршрутов.

Я искал и нашел несколько вариантов, но не уверен, какой консенсус будет достигнут относительно лучших практик и наиболее эффективных:


1) Создайте и установите ActionHandler в Apache для вызова скрипта CGI для обслуживания статического контента. Этот скрипт будет открывать соединение с БД для каждого запроса, проверять права доступа и возвращать 301 или обслуживать контент. Я думаю, что производительность сильно снизится из-за открытия нового соединения с БД для каждого запроса.

Я попытался добавить:

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

к <Directory>блоку, но это привело к тому, что все css/js возвращали 404.


2) Используйте комбинацию mod_rewriteи mod_proxyдля проксирования всех запросов на статические файлы на другой сервер приложений (или балансировки нагрузки на несколько), который уже будет иметь открытое соединение с БД, выполните проверку подлинности и соответствующим образом обработайте файл. Меня беспокоит этот подход, что Apache может стать узким местом на нисходящем канале обратно к клиенту?

Я начинаю с <Directory /var/www/html/app/public>блока, который содержит все приложение.

Я не очень хорошо знаком с mod_rewriteи mod_proxy, поэтому думаю, что смогу создать что-то вроде

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

Но я не могу заставить это проксировать запросы на уровень файлового сервера даже для проверки эффективности.


Любая информация по этому вопросу будет оценена по достоинству!

решение1

Если статический контент уже находится на веб-сервере, начните с простого. Пропустите (пока) скрипт CGI, прокси, перезапись URL и кэширование.

В директиве Directory для static используйтеМодули аутентификации httpdчтобы заблокировать это. Вы подразумеваете подключение к БД, что означает mod_authn_dbd и mod_authz_dbm, и требуете, чтобы ваша база данных имела хэши паролей, поддерживаемые модулями.

В конце концов вам понадобится кэширование, многократные запросы к базе данных на документ не работают хорошо. Реализация Apachemod_authn_socacheи он может помещать аутентификации в свой общий кэш объектов, который может поддерживаться общей памятью, memcached и т. д.

Вы могли бы сделать подобное кэширование в рамках вашего веб-приложения. Это упражнение для читателя, поскольку это больше разработка, чем настройка веб-сервера.

Связанный контент