
Me preguntaba cómo podría ofrecer un tipo de contenido diferente para cada archivo.
Por ejemplo, tengo la siguiente configuración de nginx:
server {
listen 80;
server_name site.com;
location ~ ^/(.*) {
root /home/site/;
try_files $uri
$uri.png
$uri.bin
=404;
}
}
Entonces, por ejemplo, cualquiera $uri.png
tendrá image/png
un encabezado de tipo de contenido y $uri.bin
tendrá application/octet-stream
.
Problema: No sé cómo determinar file
cuál try_files
ha elegido.
Tengo el módulo lua configurado y funcionando en caso de que sea necesario.
¿Alguien más ha probado algo como esto?
Respuesta1
Suponiendo que haya entendido lo que busca, esto funciona para mí:
if ($request_uri ~* \.png$) {
more_set_headers "Content-type: image/png";
}
if ($request_uri ~* \.(jpg|jpeg)$) {
more_set_headers "Content-type: image/jpeg";
}
if ($request_uri ~* \.gif$) {
more_set_headers "Content-type: image/gif";
}
Requiere un módulo no estándar, a menos que nginx haya cambiado recientemente para permitir que la función add_header estándar sobrescriba el tipo de contenido:http://wiki.nginx.org/HttpHeadersMoreModule
Si desea ir a la inversa (es decir, el URI original no contiene extensión y el sistema de archivos sí), intente reemplazar $request_uri con $uri, y el orden de antes/después de try_files puede importar