在 NGINX 中使用模板 .html 文件显示图像

在 NGINX 中使用模板 .html 文件显示图像

我使用 nginx 运行我的网站服务器。我目前使用 SSI(服务器端包含)来跨我网站上的 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,它将使用 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 的范围吗?我想避免在单独的应用程序中使用代理传递,因为这对于一个页面来说太过分了,使用 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 数据中检索信息,例如拍摄日期或标题,但这超出了这个问题的范围,所以我将其标记为暂时已解决并继续前进。

相关内容