Estoy usando nginx para ejecutar el servidor de mi sitio web. Actualmente estoy usando SSI (Server Side Incluye) para tener un archivo HTML común en mi sitio web que está funcionando bien en este momento. Entonces ahora quiero tener una galería de fotos, donde las fotos se almacenen en un directorio ( /var/www/photos
) y se pueda acceder a ellas desde mi sitio web de esta manera: site.com/photo/PhotoTitle.jpg
mostraría /var/www/photos/PhotoTitle.jpg
.
En este momento estoy usando el siguiente código para lograr esto:
location /photo {
root /var/www/photos;
}
Esto funciona y, como se esperaba, si voy a site.com/photo/MilkyWay.jpeg
, señalará la imagen en /var/www/photo/MilkyWay.jpeg
. Sin embargo, me gustaría mostrar la imagen en una plantilla HTML, así que creé un archivo en mi sitio web, photo.html, que cargaría los datos de la imagen (título, src, ecc) con SSI. El HTML funciona bien por sí solo. Pero no pude señalar " site.com/photo/anything.jpeg
" /photo.html
como me hubiera gustado. Idealmente, esto debería funcionar:
location /photo {
ssi on;
set $photosrc $uri; #variable values are place holders right now
set $phototitle $uri;
set $photodesc "";
alias /photo.html;
}
pero simplemente devuelve un error 404. También intenté usar /photo/
y /photo/*
, aunque no estoy seguro de qué cambiaría eso, pero de todos modos el resultado no cambió.
¿Cómo haría para hacer esto? ¿Está esto fuera del alcance de NGINX? Me gustaría evitar el uso de un pase de proxy con una aplicación separada, ya que sería excesivo para una sola página y usar html debería funcionar bien. Pero también estoy abierto a sugerencias en ese frente.
Respuesta1
aquí está mi configuración completa. Lo he cambiado un poco desde entonces y funciona ahora:
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;
}
}
El problema ahora es que necesito recuperar información de los datos EXIF, como la fecha de captura o el título, pero eso está fuera del alcance de esta pregunta, así que lo marcaré como resuelto por ahora y continuaré.