Nginx反向代理配置后指定路径返回404 Not Found求助
嗨,我来帮你排查下这个404问题,先理清楚你的场景:你在/etc/nginx/conf.d/test.conf里配置了这样的server块:
server { listen 80; server_name test; root /var/www; location /some/path/ { proxy_pass http://www.example.com/link/; } }
执行sudo nginx -s reload后,访问服务器IP根路径能看到默认欢迎页,但访问http://1xx.xx.xx.xx/some/path/时返回404,大概率是这几个原因导致的,一个个来排查:
server_name匹配问题:你的server_name设为
test,但访问用的是IP地址,这时候Nginx可能没匹配到这个server块,而是走了默认的server配置(比如默认的default.conf)。建议修改listen指令加上default_server,同时把server_name改成支持IP访问的形式:listen 80 default_server; server_name test _; # "_"匹配任何主机名,包括IP改完后重新重载Nginx,确保访问IP时走的是你配置的这个server块。
proxy_pass的斜杠配置陷阱:你当前的
proxy_pass http://www.example.com/link/末尾带了斜杠,这会让Nginx把location /some/path/匹配到的路径部分(也就是/some/path/)替换成/link/,实际转发的请求是http://www.example.com/link/。如果后端服务器上/link/这个路径本身不存在,自然会返回404。- 如果你想让请求转发到
http://www.example.com/link/some/path/,那把proxy_pass末尾的斜杠去掉:proxy_pass http://www.example.com/link; - 如果后端确实只有
/link/这个路径,那先确认后端服务正常,比如在服务器上执行curl http://www.example.com/link/,看是否能正常返回内容。
- 如果你想让请求转发到
查看Nginx错误日志找线索:直接看错误日志能更快定位问题,执行
tail -f /var/log/nginx/error.log,然后刷新返回404的页面,日志里会显示实际转发的URL、后端返回的状态码等细节,帮你精准定位哪里出问题。
先按这几步排查,应该能解决问题~
备注:内容来源于stack exchange,提问作者G M

