404问题 请求根本没到 Nginx 图片服务器

这张截图非常关键,它直接揭示了问题的真相!🕵️‍♂️

核心发现:请求根本没到 Nginx 图片服务器

请看截图中的两个致命细节:

  1. 请求的 URL 路径不对

    • 你期望的请求: http://.../goods-img/00a5036a...jpg(应该包含 /goods-img/ 前缀)。
    • 实际的请求: http://47.97.59.142:28089/00a5036a-07d3-4131-b677-956312bbbc2c.jpg
    • 结论: 前端代码直接把数据库里的文件名拼到了根目录下,完全丢失了 /goods-img/ 这个路径前缀。Nginx 找不到这个规则,自然就返回 404。
  2. 响应的 Content-Type 是 JSON

    • 截图显示: Content-Type: application/json
    • 分析: 这说明拦截这个请求的不是你的 Nginx 静态文件服务器,而是一个 后端 API 服务(比如 Java/Go/Node.js 写的接口)。
    • 推测: 你的后端服务可能有一个全局异常处理机制,当它收到一个它无法识别的路由(比如直接访问图片文件名)时,它没有转发给 Nginx,而是直接返回了一个 JSON 格式的 "404 Not Found" 错误对象。

🛠️ 解决方案

既然 Nginx 配置和 Docker 挂载都已经验证无误,现在只需要修正前端的调用方式。

方案 A:修改前端代码(推荐)

找到前端项目中拼接图片 URL 的代码位置。通常是在 Vue/React 组件或者工具函数里。

  • 错误写法(当前):

    复制代码
    // 假设 imgUrl 是从后台拿到的文件名
    let fullUrl = baseUrl + imgUrl;
    // 结果变成了 http://ip:port/文件名.jpg
  • 正确写法(修改后):

    复制代码
    // 必须手动加上 Nginx 配置的 location 前缀
    let fullUrl = baseUrl + '/goods-img/' + imgUrl;
    // 结果变成 http://ip:port/goods-img/文件名.jpg
方案 B:修改 Nginx 配置(不推荐,但可行)

如果你不想改前端代码,想让 Nginx 兼容这种"不带前缀"的请求,可以在 Nginx 配置里加一个兜底规则(但这可能会误伤其他 API 请求,需谨慎):

复制代码
# 在 server 块中添加,注意要放在其他 location 之后
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    alias /etc/nginx/img/upload/;
    expires 30d;
}

建议优先使用方案 A ,保持 URL 结构的规范性。快去检查前端代码吧,加上 /goods-img/ 就能显示了!

相关推荐
小肥君3 小时前
docker无法连接GPU资源解决方案
docker·容器·eureka
小肥君8 小时前
gpu安装milvus问题解决
java·eureka·milvus
ggaofeng18 小时前
如何在docker和k8s中使用nfs文件系统
docker·eureka·kubernetes
Jul1en_2 天前
【Redis】Docker 部署集群补充说明
redis·docker·eureka
椰椰椰耶5 天前
[SpringCloud][12]Nacos配置中心详解,快速上手,Nacos和Eureka的区别
spring·spring cloud·eureka
牟同學6 天前
Hermes Agent Docker 离线部署完整指南
docker·容器·eureka·hermes
kaisun646 天前
Docker 构建网络问题排查
网络·docker·eureka
开开心心就好7 天前
小白友好的程序联网封锁实用工具
windows·eureka·计算机外设·rabbitmq·word·excel·csdn开发云