Sou novo no Nginx e tenho um proxy reverso para um servidor glassfish upstream. Estou tentando configurar uma página 503 personalizada para quando o aplicativo estiver fora do ar para manutenção. Não consigo fazer isso há várias horas. A página Maintenance.html contém um link CSS e JPG. Eles estão aparecendo quando sou encaminhado para a página de manutenção. Tudo que recebo é o texto da página e uma imagem quebrada.
CentOS 6.5 nginx 1.4.4 (do repositório 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;
}
}
O erro que aparece no access.log é
[19/dez/2013:17:49:17 -0500] "OBTER /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:///
Eu verifiquei se /etc/nginx/html/static/header-logo.jpg existe
Tenho certeza de que é bastante simples, mas simplesmente não consigo entender!
Responder1
Recentemente, quis fazer a mesma coisa (mostrar uma página de manutenção/erro melhor com imagens, CSS e fontes personalizadas).
O que acabei fazendo foi usar um bloco de localização interno como este:
server {
…
error_page 502 = @maintenance;
location @maintenance {
root /path/to/maintenance-site;
if (!-f $request_filename) {
rewrite ^ /index.html break;
}
}
}
Eu escrevi umpostagem no blogsobre isso, se precisar de mais detalhes (foi desativado porque estava reconstruindo minha infraestrutura, mas está de volta).
Responder2
Você diz que está fazendo isso:
location ~ ^/static/ { internal; }
A internal
palavra-chave significa que isso location
só é visível para solicitações internas, que error_page
são as suas solicitações.
Se você quiser acessar /static/
diretamente do navegador da web, o que parece necessário para servir imagens referenciadas nas páginas de erro, então você terá que remover a internal
diretiva do referido arquivo location
.
Responder3
Acho que a melhor abordagem é fazer o seguinte:
- Usar
inline CSS
- Converta suas imagens para
Base64
Depois de fazer isso, você pode incorporar a string Base64 gerada na background-image
regra CSS da seguinte maneira:
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==)
<img>
Você também pode usar a string com as tags, basta passá-la para o src
atributo da seguinte forma:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEADI.....==" />
Dessa forma, você pode manter a internal
regra nginx.
Saúde!