Nginx自定义错误页面
- 2024-09-20 22:00:00
- 丁国栋
- 原创 482
Nginx有一个检测服务(无论服务的方式是CGI还是代理)是否异常的功能,允许自定义错误页面,这样如果Nginx配置的服务异常了,就可以显示友好的错误页面,例如接管 404、500、502等非正常响应。
要想做到这一点,有两点需要注意:
- 如果是Nginx的服务是通过反向代理的方式提供的,那么需要在反向代理配置中添加一个特殊的指令
proxy_intercept_errors on;这句指令的意思是如果上游服务的HTTP响应代码大于或等于300时,决定是否将响应代码发送给客户端或者决定是否拦截并重定向到nginx进行错误页面指令error_page处理。默认是关闭的,只有设置为启用才可以在上游服务异常时Nginx做出拦截,接管这些错误。 - 某些Web应用程序或服务在捕获到错误时,HTTP响应代码还是200,并不是大于300的响应代码。这里需要注意一下,如果上游服务依然给出响应,Nginx还是不会接管这些错误,而是直接发送到客户端。但如果后端服务无响应、超时、无法连接这些异常时Nginx是可以接管的。
示例:
location / {
proxy_pass https://upstream-service;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 3m;
proxy_send_timeout 3m;
proxy_read_timeout 3m;
client_max_body_size 0; # Stream request body to backend
proxy_intercept_errors on;
error_page 500 502 /500.html;
}
location = /500.html {
root /var/www/html; # 500.html 需要放到该目录下
internal;
}
如果使用的并不是反向代理,比如典型的Nginx + FastCGI,Nginx + uwscgi 等就可以直接使用error_page指令。
root /var/www/html/; error_page 500 502 /500.html;--
发表评论