
다음은 내 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)를 사용하면 브라우저는 자체 오류 페이지를 표시하고 콘텐츠가 서버에서 전송되더라도 콘텐츠를 무시할 수 있습니다.
감사합니다, 아담