Отображение изображений с использованием шаблона .html-файла в NGINX

Отображение изображений с использованием шаблона .html-файла в NGINX

Я использую nginx для запуска сервера моего сайта. В настоящее время я использую SSI (Server Side includes), чтобы иметь общее для всех HTML-файлов на моем сайте, что сейчас работает отлично. Так что теперь я хочу иметь фотогалерею, где фотографии хранятся в каталоге ( /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, поэтому я создал файл на своем веб-сайте photo.html, который будет загружать данные изображения (title, src, ecc) с помощью SSI. 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? Я бы хотел избежать использования прокси-пропуска с отдельным приложением, так как это было бы излишеством для одной страницы, а использование 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, такую ​​как дата съемки или название, но это выходит за рамки данного вопроса, поэтому я отмечу его как решенный на данный момент и продолжу.

Связанный контент