тип динамического контента try_files

тип динамического контента try_files

Мне было интересно, как я могу обслуживать разные типы контента для каждого файла.
Например, у меня следующая конфигурация nginx:

server {
    listen 80;
    server_name site.com;

    location ~ ^/(.*) {
        root /home/site/;
        try_files $uri
            $uri.png
            $uri.bin
            =404;
        }
}

Так, например, любой $uri.pngбудет иметь image/pngзаголовок типа контента и $uri.binбудет иметь application/octet-stream.

Проблема: Я не знаю, как определить, fileчто try_filesименно выбрало.
У меня есть настроенный и работающий модуль lua на всякий случай, если он понадобится.

Кто-нибудь еще пробовал что-то подобное?

решение1

Если я понял, что вы ищете, то мне подойдет следующее:

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";
}

Требуется нестандартный модуль, если только nginx недавно не изменился и не разрешил стандартной функции add_header перезаписывать Content-type:http://wiki.nginx.org/HttpHeadersMoreModule

Если вы хотите пойти в обратном направлении (т.е. исходный URI не содержит расширения, а файловая система содержит), попробуйте заменить $request_uri на $uri, и порядок до/после try_files может иметь значение.

Связанный контент