常见问题解决 --- 为什么nginx不转发反向代理的404自定义错误内容
问题描述
我配置了一个nginx进行转发,但是请求转发给后端后响应了404但是nginx返回的是默认的404页面,请分析。# AI 问答相关接口的映射,即 intelli-sdk 所在的服务地址 location /agro/sndmx-api { proxy_pass http://127.0.0.1:8888; proxy_set_header Host $host; proxy_set_header X-Name GKLBB; proxy_set_header X-Real-IP $remote_addr; } 后端响应 GET /agro/sndmx-api HTTP/1.1 Host: localhost X-Name: GKLBB X-Real-IP: 127.0.0.1 Connection: close User-Agent: curl/7.68.0 Accept: */* HTTP/1.1 404 Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Content-Type: application/json Transfer-Encoding: chunked 日期:2025 年 6 月 11 日星期三 00:51:38 GMT 连接:关闭 67 {"时间戳":"2025-06-11T00:51:38.704+00:00","状态":404,"错误":"未找到","路径":"/agro/sndmx-api"} 0 ,为什么 nginx 响应 GET /agro/sndmx-api HTTP/1.1 Host: localhost:8006 User-Agent: curl/7.68.0 Accept: */* HTTP/1.1 404 Not Found Server: nginx Date: Wed, 11 Jun 2025 00:51:38 GMT Content-Type: text/html Content-Length: 146 Connection: keep-alive <html> <head><title>404 未找到</title></head> <body> <center><h1>404 未找到</h1></center> <hr><center>nginx</center> </body> </html> 请分析修改为后端服务器响应什么前端响应什么包括 404
解决方法:
解决方案
在 location
块中显式关闭错误拦截,并确保 Nginx 透传后端响应:
修改后的 Nginx 配置
location /agro/sndmx-api {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Name GKLBB;
proxy_set_header X-Real-IP $remote_addr;
# 关键配置:关闭错误拦截,透传后端响应
proxy_intercept_errors off;
# 可选:确保不修改Content-Type
proxy_pass_request_headers on;
}