
Мне было интересно, как я могу обслуживать разные типы контента для каждого файла.
Например, у меня следующая конфигурация 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 может иметь значение.