私は 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
リクエストに対してのみ表示されることを意味します。
エラー ページから参照される画像を提供するためには、Web ブラウザーから直接アクセスできるようにする必要があると思われますが、その場合は、上記の からディレクティブ/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.....==" />
この方法では、nginx ルールを維持できますinternal
。
乾杯!