NGINX でテンプレート .html ファイルを使用して画像を表示する

NGINX でテンプレート .html ファイルを使用して画像を表示する

私はウェブサイトのサーバーを実行するために nginx を使用しています。現在、ウェブサイト上の HTML ファイル間で共通化するために SSI (Server Side Includes) を使用していますが、これは今のところ問題なく動作しています。そこで、写真ギャラリーを作成し、写真をディレクトリ ( /var/www/photos) に保存して、次のようにウェブサイトからアクセスできるようにしたいと考えています。site.com/photo/PhotoTitle.jpgは と表示されます。/var/www/photos/PhotoTitle.jpg

現在、これを実現するために次のコードを使用しています。

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

これは機能し、予想どおり、 に移動するとsite.com/photo/MilkyWay.jpeg、 にある画像がポイントされます/var/www/photo/MilkyWay.jpeg。ただし、HTML テンプレートで画像を表示したいので、Web サイトに photo.html ファイルを作成しました。このファイルは、SSI を使用して画像データ (title、src、ecc) をロードします。HTML は単独でも問題なく機能します。ただし、" site.com/photo/anything.jpeg" を/photo.html希望どおりにポイントすることはできませんでした。理想的には、次の方法でうまくいくはずです。

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

しかし、404 エラーが返されるだけです。 と も使用してみました/photo//photo/*、何が変わるかはわかりませんが、とにかく結果は変わりませんでした。

これをどうやって実行すればいいのでしょうか? これは NGINX の範囲外でしょうか? プロキシ パスを別のアプリで使用するのは避けたいと思います。1 ページだけの場合はやり過ぎですし、HTML を使用すれば問題なく動作するはずです。ただし、その点についても提案があれば歓迎します。

答え1

これが私の完全な設定です。その後少し変更しましたが、今は動作します:

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

現在の問題は、撮影日やタイトルなどの情報を EXIF データから取得する必要があることですが、それはこの質問の範囲外なので、今のところは解決済みとしてマークし、先に進みます。

関連情報