Soy nuevo en Nginx y tengo un proxy inverso para un servidor Glassfish ascendente. Estoy intentando configurar una página 503 personalizada para cuando la aplicación esté inactiva por mantenimiento. Llevo varias horas sin poder hacerlo. La página de mantenimiento.html contiene un enlace css y jpg. Estos aparecen cuando me reenvían a la página de mantenimiento. Todo lo que obtengo es el texto de la página y una imagen rota.
CentOS 6.5 nginx 1.4.4 (del repositorio de 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;
}
}
El error que aparece en access.log es
[19/dic/2013:17:49:17 -0500] "GET /static/main.css HTTP/1.1" 404 1136 "http:/// [19/dic/2013:17:49:18 -0500] "OBTENER /static/header-logo.jpg HTTP/1.1" 404 1136 "http:///
He comprobado que /etc/nginx/html/static/header-logo.jpg existe
Estoy seguro de que es bastante simple, ¡pero no puedo entenderlo!
Respuesta1
Recientemente quise hacer lo mismo (mostrar una página de error/mantenimiento más agradable con imágenes, CSS y fuentes personalizadas).
Lo que terminé haciendo fue usar un bloque de ubicación interno como este:
server {
…
error_page 502 = @maintenance;
location @maintenance {
root /path/to/maintenance-site;
if (!-f $request_filename) {
rewrite ^ /index.html break;
}
}
}
escribí unentrada en el blogal respecto, si necesita más detalles (ha estado inactivo porque estaba reconstruyendo mi infraestructura pero ha vuelto a funcionar).
Respuesta2
Dices que estás haciendo esto:
location ~ ^/static/ { internal; }
La internal
palabra clave significa que esto location
solo es visible para solicitudes internas, que error_page
son sus solicitudes.
Si desea poder acceder /static/
directamente desde el navegador web, lo que parecería necesario para mostrar imágenes a las que se hace referencia en las páginas de error, entonces deberá eliminar la internal
directiva de dicho archivo location
.
Respuesta3
Creo que el mejor enfoque es hacer las siguientes cosas:
- Usar
inline CSS
- Convierte tus imágenes a
Base64
Después de hacer esto, puede incrustar la cadena Base64 generada en la background-image
regla CSS de la siguiente manera:
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==)
También puedes usar la cadena con las <img>
etiquetas, simplemente pásala al src
atributo de la siguiente manera:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==" />
De esta manera puedes mantener la internal
regla nginx.
¡Salud!