Nginx配置location /api反向代理返回404错误排查
配置错误说明
你的配置共存在两处问题,直接导致两类404现象:
根路径访问404
443端口的server块中仅定义了/api路径的匹配规则,没有配置location /的通用匹配逻辑。Nginx收到根路径请求时找不到可匹配的处理规则,直接返回404。这和你测试的现象完全吻合:将location /api改为location /后,根路径存在匹配规则,即可正常响应。/api路径访问404
反向代理路径转发规则不符合预期:当前proxy_pass http://webdemo:80;写法末尾未携带URI,Nginx转发时会把原始请求的完整路径(包含/api前缀)全量传给后端服务。例如访问my.domain.com/api/list,实际转发到后端的地址是http://webdemo:80/api/list,如果你的webdemo后端本身没有配置/api前缀下的路由,就会直接返回404。
修正配置参考
调整/etc/nginx/conf.d/default.conf中的443 server块内容如下即可:
server { server_name my.domain.com; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/my.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/my.domain.com/privkey.pem; # 根路径处理规则,根据你的实际业务调整即可 location / { # 示例:根路径为静态页面时的配置,若根路径也需要反向代理可替换为proxy_pass规则 root /usr/share/nginx/html; index index.html index.htm; } # 末尾加斜杠,精确匹配/api前缀下的所有路径,避免误匹配/apixxx类路径 location /api/ { # proxy_pass末尾加斜杠,转发时会自动剥离/api前缀 # 例如访问/api/list会转发为http://webdemo:80/list proxy_pass http://webdemo:80/; # 补充反向代理常用请求头,保证后端获取到正确的客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
注意事项
- 如果你需要后端服务保留
/api路径前缀,proxy_pass后无需加末尾斜杠,但必须提前在webdemo服务中配置好/api前缀对应的路由规则。 - 配置修改完成后,先执行
nginx -t校验语法无报错,再执行nginx -s reload重载配置,新规则才会生效。
内容的提问来源于stack exchange,提问作者Alexandre_Bon
相关产品推荐
相关产品推荐

