Nginx自定义错误页面
- 2024-09-20 22:00:00
- 丁国栋
- 原创 82
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;--
发表评论