Mostrando imagens usando um arquivo .html de modelo no NGINX

Mostrando imagens usando um arquivo .html de modelo no NGINX

Estou usando o nginx para executar o servidor do meu site. Atualmente, estou usando SSI (Server Side Included) para ter um comum entre os arquivos HTML do meu site, que está funcionando bem no momento. Então agora quero ter uma galeria de fotos, onde as fotos sejam armazenadas em um diretório ( /var/www/photos) e possam ser acessadas no meu site desta forma: site.com/photo/PhotoTitle.jpgiria mostrar /var/www/photos/PhotoTitle.jpg.

No momento, estou usando o seguinte código para conseguir isso:

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

Isso funciona e como esperado, se eu for site.com/photo/MilkyWay.jpeg, ele apontará para a imagem em /var/www/photo/MilkyWay.jpeg. Porém gostaria de mostrar a imagem em um template HTML, então criei um arquivo no meu site, photo.html, que carregaria os dados da imagem (título, src, ecc) com SSI. O html funciona bem por si só. Mas não consegui apontar " site.com/photo/anything.jpeg" /photo.htmlcomo gostaria. Idealmente, isso deve funcionar:

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

mas apenas retorna um erro 404. Também tentei usar /photo/and /photo/*, embora não tenha certeza do que isso mudaria, mas de qualquer forma o resultado não mudou.

Como eu faria isso? Isso está fora do escopo do NGINX? Eu gostaria de evitar o uso de um passe de proxy com um aplicativo separado, pois isso seria um exagero para apenas uma página e o uso de HTML deve funcionar bem. Mas também estou aberto a sugestões nesse sentido.

Responder1

aqui está minha configuração completa. Eu mudei um pouco desde então e funciona agora:

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

O problema agora é que preciso recuperar informações dos dados EXIF, como a data de captura ou o título, mas isso está fora do escopo desta questão, então marcarei isso como resolvido por enquanto e seguirei em frente.

informação relacionada