如何在NGINX自定义错误页面中展示请求携带的头部与状态码?
实现错误页展示状态码与请求头的操作步骤
你可以通过Nginx的SSI(服务器端包含)功能实现需求,无需额外部署后端服务,改动成本极低。
步骤1:调整Nginx配置
修改你的Nginx站点配置,示例如下:
location / { proxy_set_header X-Real-IP $remote_addr; # 错误码重定向到命名location处理,保留原请求状态 error_page 400 404 500 502 503 504 @error_page; } # 错误页专属处理逻辑 location @error_page { # 开启SSI解析支持 ssi on; ssi_types text/html; add_header Content-Type text/html; # 返回对应状态码,加载错误页文件 return $status '<!--# include virtual="/test_error.html" -->'; } # 配置错误页文件规则 location = /test_error.html { # 替换为你实际存放test_error.html的目录路径 root /usr/share/nginx/custom_error; # 仅允许内部重定向访问,禁止外部直接请求该文件 internal; }
步骤2:修改自定义错误页代码
编辑你的test_error.html文件,通过SSI标签直接读取Nginx内置变量:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>请求错误</title> </head> <body> <h2>请求处理失败</h2> <p>* 错误状态码:<!--# echo var="status" --></p> <p>* X-Forwarded-For头部值:<!--# echo var="http_x_forwarded_for" default="未携带该请求头" --></p> <p>* 客户端直连IP:<!--# echo var="remote_addr" default="获取失败" --></p> <!-- 如需读取其他请求头,格式为http_加头部小写(横杠替换为下划线),示例如下 --> <p>* User-Agent:<!--# echo var="http_user_agent" default="获取失败" --></p> </body> </html>
步骤3:生效配置并测试
- 执行
nginx -t检查配置语法是否正确,无报错后执行nginx -s reload重载Nginx配置 - VirtualBox环境需先确认端口映射规则正确,宿主机可以正常访问虚拟机的Nginx服务端口
- 测试时可通过curl工具自定义请求头验证:
curl -H "X-Forwarded-For: 192.168.56.10" http://虚拟机IP/任意不存在的路径,查看返回内容是否正常输出状态码和头部信息
补充说明
如果X-Forwarded-For头部存在多个IP(多层代理场景),$http_x_forwarded_for会返回完整的逗号分隔IP列表,你可按需提取对应位置的IP使用。
内容的提问来源于stack exchange,提问作者TekDood
相关产品推荐
相关产品推荐

