try_files 動的コンテンツタイプ

try_files 動的コンテンツタイプ

各ファイルに異なるコンテンツ タイプを提供するにはどうしたらよいかと思いました。
たとえば、次のような nginx 構成があります。

server {
    listen 80;
    server_name site.com;

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

たとえば、 any にはコンテンツ タイプ ヘッダー$uri.pngがあり、が存在します。 image/png$uri.binapplication/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の前後の順序が重要になる場合があります。

関連情報