我是 Nginx 新手,並且有一個上游 glassfish 伺服器的反向代理。我正在嘗試為應用程式因維護而關閉時設定自訂 503 頁面。幾個小時以來我一直未能這樣做。 Maintenance.html 頁麵包含 css 和 jpg 連結。當我轉發到維護頁面時,這些就會顯示出來。我得到的只是頁面的文字和損壞的圖像。
CentOS 6.5 nginx 1.4.4(來自 nginx 儲存庫)
upstream glassfish {
server <upstream IP>:8181 max_fails=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
error_page 404 502 /static/error.html;
error_page 503 /static/maintenance.html;
location ~ ^/static/ {
internal;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass https://glassfish;
port_in_redirect off;
}
}
access.log 中顯示的錯誤是
[19/Dec/2013:17:49:17 -0500]「GET /static/main.css HTTP/1.1」404 1136「http:/// [19/Dec/2013:17:49:18 -0500] “GET /static/header-logo.jpg HTTP/1.1” 404 1136 “http:///
我檢查了 /etc/nginx/html/static/header-logo.jpg 是否存在
我確信這很簡單,但我就是無法弄清楚!
答案1
我最近想做同樣的事情(用圖像、CSS 和自訂字體顯示更好的維護/錯誤頁面)。
我最終做的是使用像這樣的內部位置區塊:
server {
…
error_page 502 = @maintenance;
location @maintenance {
root /path/to/maintenance-site;
if (!-f $request_filename) {
rewrite ^ /index.html break;
}
}
}
我寫了一個部落格文章關於它,如果您需要更多詳細資訊(由於我正在重建基礎設施而已關閉,但又恢復了)。
答案2
你說你正在這樣做:
location ~ ^/static/ { internal; }
該internal
關鍵字意味著這location
僅對內部請求(即您的error_page
請求)可見。
如果您希望能夠/static/
直接從網頁瀏覽器存取(這對於提供從錯誤頁面引用的圖像似乎是必要的),那麼您必須internal
從上述location
.
答案3
我認為最好的方法是做以下事情:
- 使用
inline CSS
- 將您的圖像轉換為
Base64
完成此操作後,您可以將產生的 Base64 字串嵌入到background-image
CSS 規則中,如下所示:
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==)
<img>
您也可以將字串與標籤一起使用,只需將其傳遞給src
屬性即可,如下所示:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==" />
這樣就可以保持internal
nginx規則。
乾杯!