Preciso fazer um servidor funcionar assim:
Verifique se o arquivo solicitado existe localmente.
- se estiver lá, sirva imediatamente
- caso contrário, passe o REQUEST_URI para um script que irá baixá-lo
- se o arquivo tiver ?delete=1, chame o script para removê-lo
Implementei com sucesso esse comportamento com nginx (usando o manipulador de erros 404) e PHP. Acontece que para implementar isso em outro servidor eu tenho que instalar/compilar o nginx e o php.
Minha pergunta é se existe uma maneira de remover o php da pilha e colocar o nginx (ou algum outro servidor) para fazer o trabalho. Uma maneira ideal para mim seria se eu pudesse executar/chamar scripts/comandos bash diretamente do servidor.
Alguém pode me indicar a direção certa?
Responder1
O que você está tentando fazer pode ser realizado com CGI simples e um script de shell com muita facilidade. Como você habilita/implementa o CGI depende do servidor. Nginxdeveser capaz, mas eu sei que o Apache é. Consulte a documentação ou faça uma pergunta específica sobre como ativar o CGI em um determinado servidor web.
Lógica bash simples para testar se um arquivo existe e exibi-lo:
#!/bin/bash
FILE="/path/to/file"
URI="http://example.com/file"
/bin/echo "Content-type: text/plain"
/bin/echo
if [ -f $FILE ]; then
/bin/cat $FILE
else
/usr/bin/wget $URI
fi
Você pode analisar ${QUERY_STRING} para obter sua ação de exclusão. Deixarei a solução completa e o tratamento de erros como um exercício para você. Fica um pouco complicado e está além do escopo do nosso formato de perguntas e respostas.