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