在 NGINX 中使用模板 .html 檔案顯示圖像

在 NGINX 中使用模板 .html 檔案顯示圖像

我正在使用 nginx 來運行我的網站伺服器。我目前正在使用 SSI(伺服器端包含)在我的網站上的 HTML 檔案之間建立一個通用的,目前工作正常。所以現在我想要一個照片庫,其中的照片儲存在目錄 ( /var/www/photos) 中,並且可以透過以下方式從我的網站存取它們:site.com/photo/PhotoTitle.jpgwill show /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 載入圖像資料(標題、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/and /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 數據中檢索信息,例如捕獲日期或標題,但這超出了這個問題的範圍,因此我將其標記為暫時已解決並繼續。

相關內容