저는 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 규칙을 유지할 수 있습니다.
건배!