업스트림이 다운된 경우 Nginx 사용자 정의 내부 오류 페이지

업스트림이 다운된 경우 Nginx 사용자 정의 내부 오류 페이지

저는 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.....==" />

이렇게 하면 internalnginx 규칙을 유지할 수 있습니다.

건배!

관련 정보