try_files dynamischer Inhaltstyp

try_files dynamischer Inhaltstyp

Ich habe mich gefragt, wie ich für jede Datei einen anderen Inhaltstyp bereitstellen kann.
Ich habe beispielsweise die folgende Nginx-Konfiguration:

server {
    listen 80;
    server_name site.com;

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

$uri.pngSo hat beispielsweise jeder image/pngden Inhaltstyp Header und $uri.binhat application/octet-stream.

Problem: Ich weiß nicht, wie ich feststellen kann, filewer try_filesausgewählt hat.
Ich habe ein Lua-Modul eingerichtet und in Betrieb, falls es benötigt wird.

Hat sonst noch jemand so etwas ausprobiert?

Antwort1

Vorausgesetzt, ich habe verstanden, was Sie wollen, funktioniert das für mich:

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

Erfordert ein nicht standardmäßiges Modul, es sei denn, Nginx wurde kürzlich geändert, um der Standardfunktion add_header das Überschreiben des Inhaltstyps zu ermöglichen:http://wiki.nginx.org/HttpHeadersMoreModule

Wenn Sie es umgekehrt machen möchten (d. h. die ursprüngliche URI enthält keine Erweiterung, das Dateisystem jedoch schon), versuchen Sie, $request_uri durch $uri zu ersetzen. Dabei kann die Reihenfolge vor/nach try_files eine Rolle spielen.

verwandte Informationen