Necesito hacer que un servidor funcione de esta manera:
Compruebe si el archivo solicitado existe localmente.
- Si está ahí, sírvelo de inmediato.
- si no, pase REQUEST_URI a un script que lo descargará
- si el archivo tiene ?delete=1, llame al script para eliminarlo
Implementé con éxito este comportamiento con nginx (usando el controlador de errores 404) y PHP. La cuestión es que para implementar esto en otro servidor tengo que instalar/compilar tanto nginx como php.
Mi pregunta es si hay alguna manera de eliminar php de la pila y poner nginx (o algún otro servidor) para hacer el trabajo. Una forma ideal para mí sería si pudiera ejecutar/llamar scripts/comandos bash directamente desde el servidor.
¿Alguien puede indicarme la dirección correcta?
Respuesta1
Lo que está intentando hacer se puede lograr con CGI simple y un script de shell muy fácilmente. La forma de habilitar/implementar CGI depende del servidor. nginxdeberíaser capaz, pero sé que Apache sí lo es. Consulte la documentación o haga una pregunta específica sobre cómo habilitar CGI en un servidor web determinado.
Lógica bash simple para probar si existe un archivo y mostrarlo:
#!/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
Puede analizar ${QUERY_STRING} para obtener su acción de eliminación. Te dejaré la solución completa y el manejo de errores como ejercicio. Se vuelve un poco complicado y está más allá del alcance de nuestro formato de preguntas y respuestas.