Ich bin neu bei Nginx und habe einen Reverse-Proxy zu einem Upstream-Glassfish-Server. Ich versuche, eine benutzerdefinierte 503-Seite für den Fall einzurichten, dass die App wegen Wartungsarbeiten nicht erreichbar ist. Das gelingt mir seit mehreren Stunden nicht. Die Seite maintenance.html enthält einen CSS- und einen JPG-Link. Diese werden angezeigt, wenn ich auf die Wartungsseite weitergeleitet werde. Ich erhalte lediglich den Text der Seite und ein defektes Bild.
CentOS 6.5 nginx 1.4.4 (aus dem Nginx-Repository)
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;
}
}
Der im access.log angezeigte Fehler lautet
[19. Dez. 2013:17:49:17 -0500] "GET /static/main.css HTTP/1.1" 404 1136 "http:/// [19. Dez. 2013:17:49:18 -0500] "GET /static/header-logo.jpg HTTP/1.1" 404 1136 "http:///
Ich habe überprüft, ob /etc/nginx/html/static/header-logo.jpg existiert
Ich bin sicher, dass es ziemlich einfach ist, aber ich komme einfach nicht dahinter!
Antwort1
Ich wollte vor Kurzem dasselbe tun (eine schönere Wartungs-/Fehlerseite mit Bildern, CSS und benutzerdefinierten Schriftarten anzeigen).
Letztendlich habe ich einen internen Standortblock wie diesen verwendet:
server {
…
error_page 502 = @maintenance;
location @maintenance {
root /path/to/maintenance-site;
if (!-f $request_filename) {
rewrite ^ /index.html break;
}
}
}
Ich schrieb eineBlogeintragdarüber, wenn Sie weitere Einzelheiten benötigen (war ausgefallen, weil ich meine Infrastruktur neu aufgebaut habe, ist aber wieder aktiv).
Antwort2
Sie sagen, Sie tun Folgendes:
location ~ ^/static/ { internal; }
Das internal
Schlüsselwort bedeutet, dass dies location
nur für interne Anfragen sichtbar ist, also error_page
für Ihre Anfragen.
/static/
Wenn Sie direkt vom Webbrowser aus zugreifen möchten , was zum Bereitstellen der von den Fehlerseiten referenzierten Bilder erforderlich erscheint, müssen Sie die internal
Direktive aus dem besagten entfernen location
.
Antwort3
Ich denke, der beste Ansatz besteht darin, Folgendes zu tun:
- Verwenden
inline CSS
- Konvertieren Sie Ihre Bilder in
Base64
Anschließend können Sie den generierten Base64-String background-image
wie folgt in die CSS-Regel einbetten:
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==)
<img>
Sie können die Zeichenfolge auch mit den Tags verwenden . Übergeben Sie sie dazu einfach src
wie folgt an das Attribut:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==" />
Auf diese Weise können Sie die internal
Nginx-Regel einhalten.
Prost!