
各ファイルに異なるコンテンツ タイプを提供するにはどうしたらよいかと思いました。
たとえば、次のような 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.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の前後の順序が重要になる場合があります。