Назад | Перейти на главную страницу

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

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

Я использую 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> block, но из-за этого все 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>

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


Любое понимание здесь будет оценено!

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

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

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

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