
Estou tentando descobrir a melhor maneira de adicionar uma verificação de autenticação às solicitações de ativos estáticos no meu servidor.
Estou executando o Apache2.4 e o PHP/Laravel, que é executado servindo conteúdo estático diretamente do DocumentRoot
e entra no index.php
para lidar com as rotas dinâmicas.
Estive pesquisando e encontrei algumas opções, mas não tenho certeza de qual seria o consenso sobre as melhores práticas e as mais eficientes:
1) Crie e defina um ActionHandler no Apache para chamar um script CGI para servir conteúdo estático. Este script abriria uma conexão de banco de dados para cada solicitação, verificaria os direitos de controle de acesso e retornaria um 301 ou serviria o conteúdo. Meu pensamento sobre isso é que o desempenho sofrerá um grande impacto devido à abertura de uma nova conexão de banco de dados para cada solicitação.
Tentei adicionar:
Action serve-static /var/www/file-server.py
AddHandler serve-static .js .css
ao <Directory>
bloco, mas isso fez com que todos os css/js retornassem 404.
2) Use uma combinação mod_rewrite
e mod_proxy
faça proxy de todas as solicitações de arquivos estáticos para outro servidor de aplicativos (ou balanceamento de carga para vários) que já teria uma conexão de banco de dados aberta, execute uma verificação de autenticação e envie o arquivo de volta adequadamente. Minha preocupação com essa abordagem é que acho que o Apache poderia se tornar um gargalo no downlink de volta para o cliente.
Começo com um <Directory /var/www/html/app/public>
bloco que contém todo o aplicativo
Não estou muito familiarizado com mod_rewrite
and mod_proxy
, então acho que poderia criar algo como
<Directory /var/www/html/app/public/static>
RewriteEngine on
RewriteRule "(.*)$" "http://fileserver/$1" [P]
ProxyPassReverse "/public/static" "http://fileserver/"
</Directory>
Mas não consigo fazer com que isso faça solicitações de proxy para a camada do servidor de arquivos para testar a eficiência.
Qualquer visão aqui seria apreciada!
Responder1
Se o conteúdo estático já estiver no servidor web, comece de forma simples. Ignore (por enquanto) o script CGI, proxy, reescrita de URL e armazenamento em cache.
Em uma diretiva Directory para estática, useMódulos de autenticação do httpdpara bloquear isso. Você implica uma conexão de banco de dados, o que significa mod_authn_dbd e mod_authz_dbm, e exige que seu banco de dados tenha hashes de senha suportados pelos módulos.
Eventualmente, você desejará o armazenamento em cache; várias consultas de banco de dados por documento não funcionam bem. Uma implementação do Apache émod_authn_socache, e pode colocar autenticações em seu cache de objeto compartilhado, que pode ser apoiado por memória compartilhada, memcached e muito mais.
Você poderia fazer cache semelhante na estrutura do seu aplicativo web. Isso é um exercício para o leitor, pois é mais desenvolvimento do que configuração de um servidor web.