Anzeigen von Bildern mithilfe einer HTML-Vorlagendatei in NGINX

Anzeigen von Bildern mithilfe einer HTML-Vorlagendatei in NGINX

Ich verwende nginx, um den Server meiner Website zu betreiben. Ich verwende derzeit SSI (Server Side Includes), um eine gemeinsame HTML-Datei auf meiner Website zu haben, was derzeit gut funktioniert. Jetzt möchte ich also eine Fotogalerie haben, in der die Fotos in einem Verzeichnis ( /var/www/photos) gespeichert sind und von meiner Website aus folgendermaßen aufgerufen werden können: site.com/photo/PhotoTitle.jpgwürde anzeigen /var/www/photos/PhotoTitle.jpg.

Im Moment verwende ich den folgenden Code, um dies zu erreichen:

location /photo {
    root /var/www/photos;
}

Das funktioniert und wie erwartet wird, wenn ich zu gehe site.com/photo/MilkyWay.jpeg, auf das Bild unter verwiesen /var/www/photo/MilkyWay.jpeg. Ich möchte das Bild jedoch in einer HTML-Vorlage anzeigen, also habe ich auf meiner Website eine Datei erstellt, photo.html, die die Bilddaten (Titel, Quelle usw.) mit SSI lädt. Das HTML funktioniert von sich aus einwandfrei. Aber ich konnte nicht mit " site.com/photo/anything.jpeg" auf verweisen /photo.html, wie ich es gerne gehabt hätte. Im Idealfall sollte das hier funktionieren:

location /photo {
    ssi on;
    set $photosrc $uri; #variable values are place holders right now
    set $phototitle $uri;
    set $photodesc "";
    alias /photo.html;
}

aber es gibt nur einen 404-Fehler zurück. Ich habe auch versucht, /photo/und zu verwenden /photo/*, obwohl ich nicht sicher bin, was das ändern würde, aber das Ergebnis hat sich jedenfalls nicht geändert.

Wie würde ich dabei vorgehen? Liegt das außerhalb des Anwendungsbereichs von NGINX? Ich möchte die Verwendung eines Proxy-Passes mit einer separaten App vermeiden, da dies für nur eine Seite übertrieben wäre und die Verwendung von HTML problemlos funktionieren sollte. Aber auch diesbezüglich bin ich offen für Vorschläge.

Antwort1

hier ist meine vollständige Konfiguration. Ich habe sie seitdem ein wenig geändert und jetzt funktioniert sie:

map $request_uri $request_basename {
   ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}
server {
    listen 80;
    listen 8080;

    root /var/www/sito;
    index index.html index.htm;

    location / {
        ssi on;
    }
    location * {
        ssi on;
        try_files /$uri /$uri.html /index.html =404;
    }
    location /posts {
        proxy_pass http://127.0.0.1:2727;
        proxy_redirect  http://127.0.0.1:2727/ /;
        proxy_read_timeout 60s;

        proxy_buffering off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Port $server_port;
    }
    location /photos {
        root /var/www;
    }
    location /photo {
        ssi on;
        ssi_last_modified on;
        set $photosrc /photos/$request_basename;
        set $phototitle $request_basename;
        set $photodesc "";
        try_files /photo.html =404;
    }
}

Das Problem besteht jetzt darin, dass ich Informationen aus den EXIF-Daten abrufen muss, beispielsweise das Aufnahmedatum oder den Titel. Dies liegt jedoch außerhalb des Rahmens dieser Frage. Daher markiere ich dies vorerst als gelöst und fahre fort.

verwandte Informationen