Melhor maneira de adicionar camada de autenticação a solicitações de arquivos estáticos?

1

Estou tentando descobrir a melhor maneira de adicionar uma verificação de autenticação a solicitações de ativos estáticos no meu servidor.

Estou executando o Apache2.4 e o PHP / Laravel, que são executados servindo conteúdo estático diretamente do DocumentRoot e entram no index.php para manipular as rotas dinâmicas.

Eu tenho pesquisado e encontrado algumas opções, mas não sei qual seria o consenso sobre as práticas recomendadas e mais eficiente:

1) Crie e defina um ActionHandler no Apache para chamar um script CGI para servir conteúdo estático. Esse 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 terá um impacto enorme por causa da abertura de uma nova conexão de banco de dados para cada solicitação.

Eu tentei adicionar:

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

para o bloco <Directory> , mas isso fez com que todos os css / js retornassem 404.

2) Use uma combinação de mod_rewrite e mod_proxy para fazer proxy de todas as solicitações de arquivos estáticos para outro servidor de aplicativos (ou balanceamento de carga para múltiplos) que já teriam uma conexão DB aberta, executar uma verificação de autenticação e atender ao arquivar de volta adequadamente. Minha preocupação com essa abordagem é que eu acho que o Apache poderia se tornar um gargalo no downlink para o cliente?

Eu começo com um bloco <Directory /var/www/html/app/public> que contém todo o aplicativo

Não estou muito familiarizado com mod_rewrite e mod_proxy , por isso 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 isso com solicitações de proxy para a camada do servidor de arquivos para testar a eficiência.

Qualquer ideia aqui seria apreciada!

    
por Neurax 25.08.2018 / 23:16

1 resposta

0

Se o conteúdo estático já estiver no servidor da Web, inicie com simplicidade. Ignore (por enquanto) o script CGI, proxy, regravação de URL e armazenamento em cache.

Em uma diretiva de diretório para estática, use o link para bloquear isso. Você implica uma conexão DB, o que significa mod_authn_dbd e mod_authz_dbm, e requer que seu banco de dados tenha hashes de senha suportados pelos módulos.

Você desejará o armazenamento em cache, várias consultas do banco de dados por documento não funcionam bem. Uma implementação do Apache é o mod_authn_socache , e ele pode inserir auths em seu cache de objetos compartilhados, o que pode ser suportado por memória compartilhada, memcached e muito mais.

Você pode fazer cache semelhante no framework do seu aplicativo da web. Isso é um exercício para o leitor, já que é mais desenvolvimento do que configurar um servidor web.

    
por 26.08.2018 / 05:05