tipo de contenido dinámico try_files

tipo de contenido dinámico try_files

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.pngtendrá image/pngun encabezado de tipo de contenido y $uri.bintendrá application/octet-stream.

Problema: No sé cómo determinar filecuál try_filesha 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

información relacionada