在对 华夏ERP 二次开发部署后,商品的图片上传后访问 nginx 404。查看图片上传接口 upload 是成功的,服务器上也能找到文件上传配置地址 file.path 下的图片文件。但图片预览不出来:

图片上传成功但预览失败,访问 nginx 404

本地测试没有问题,查询项目日志没有显示。怀疑是 nginx 服务器本身做了拦截,因为华夏ERP中的上传图片访问是通过后台接口读取并输出流文件的,如果访问接口报 404 应该会有日志。

官方 通过宝塔部署的文档 给到的配置为:

# 给nginx配置文件增加如下内容,改完之后重启nginx。注意: gzip 配置可以提高系统访问速度。
 server {
        listen 3000;
        server_name  localhost;
        gzip on;
        gzip_min_length 100;
        gzip_types text/plain text/css application/xml application/javascript;
        gzip_vary on;
        location / {
            root   /home/jshERP/jshERP-web;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
        location /jshERP-boot/ {
        proxy_pass http://localhost:9999/jshERP-boot/;
        proxy_set_header Host $host:$server_port;
        }
 }

这边是把 这些配置内容修改、增加到宝塔站点的配置文件中的,没有清除原来的一些配置(这里就是后面发现的问题所在)

通过测试发现,图片后缀为大写的文件上传后可以正常访问,比如:JPGPNG。这加深了我对于 nginx 拦截了图片请求的怀疑。找到一处对于图片过期时间的配置:

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }

并没有看出来有什么问题,但为了确认问题,还是注释掉测试了一下。然后就图片可以正常访问了。

所以 location /jshERP-boot/ 的请求被这个 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 拦截了,因为它去正常的判断图片是否存在,然而图片不存在(通过后台接口返回输出) nginx 就返回了 404。