nginx는 문서 루트의 하위 디렉터리에 error_page를 제공하지 않습니다.

nginx는 문서 루트의 하위 디렉터리에 error_page를 제공하지 않습니다.

다음은 내 nginx 구성의 일부입니다.

server {
    error_page 500 /errors/500.html;
}

내 애플리케이션에서 500이 발생하면 Chrome은 내 맞춤 오류 페이지가 아닌 기본 500 페이지(Firefox 및 Safari는 빈 페이지를 표시함)만 표시합니다.

http://server/errors/500.html방문하여 페이지를 볼 수 있기 때문에 파일이 존재한다는 것을 알고 있습니다 . 파일을 문서 루트로 이동하고 구성을 다음과 같이 변경할 수도 있습니다.

server {
    error_page 500 /500.html;
}

nginx는 페이지를 올바르게 제공하므로 서버에서 다른 것이 잘못 구성된 것 같지 않습니다.

나는 또한 다음을 시도했습니다.

server {
    error_page 500 $document_root/errors/500.html;
}

그리고:

server {
    error_page 500 http://$http_host/errors/500.html;
}

그리고:

server {
   error_page 500 /500.html;
   location = /500.html {
       root /path/to/errors/;
   }
}

운없이.

이것이 예상되는 동작입니까? 오류 페이지는 문서 루트에 존재해야 합니까, 아니면 분명한 내용이 누락되어 있습니까?


업데이트 1:이것도 실패합니다.

server {
    error_page 500 /foo.html;
}

foo.html문서 루트에 실제로 존재하는 경우 다른 것이 내 구성을 덮어쓰는 것처럼 보이지만 이 블록은 지시어 /etc/nginx/*를 참조하는 유일한 위치입니다 error_page.

nginx 구성을 설정할 수 있는 다른 곳이 있나요?

답변1

추가해 보세요

proxy_intercept_errors on;

또는

fastcgi_intercept_errors on;

구성에 따라 서버 블록에 있습니다.

이런 종류의 구성은 정상적으로 작동합니다.

  error_page   500 502 503 504  /500.html;
    location = /500.html {
        root   /home/static/pages;
    }

답변2

이 시도:

서버 { error_page 500 =200 /errors/500.html; }

그러면 브라우저에 페이지가 표시되도록 http 상태 200이 전송되어야 합니다. 기본 상태(500)를 사용하면 브라우저는 자체 오류 페이지를 표시하고 콘텐츠가 서버에서 전송되더라도 콘텐츠를 무시할 수 있습니다.

감사합니다, 아담

관련 정보