使用 Nginx、Docker、Django、Digital Ocean 的 img 404

使用 Nginx、Docker、Django、Digital Ocean 的 img 404

由于某种原因,我的 CSS、JS 和 Font-Awesome 静态资产被识别并正常提供,但我的 img 静态文件在 Nginx Docker 容器日志中显示 404 错误。

当我在本地构建这些容器时,一切都正常,但是当我在 Digital Ocean 上构建时,img 文件开始向 Nginx 抛出 404 错误。

我已经忙了几天了,却没有任何收获,如能得到任何帮助我将非常感激。

这是我的 Nginx 设置:

server {

    listen 80;
    server_name 104.236.29.80;

    access_log /dev/stdout;
    error_log /dev/stdout info;

    location /static/ {
        alias /usr/src/app/personal/static/;
    }

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}


下面是我构建 Nginx 的 Dockerfile:

FROM tutum/nginx
RUN rm /etc/nginx/sites-enabled/default
ADD sites-enabled/ /etc/nginx/sites-enabled


我的 Docker-compose 文件看起来有点像这样:

web:
    restart: always
    build: ./web
    expose:
      - 8000
    links:
      - postgres:postgres
    volumes:
      - ./web:/usr/src/app
    env_file:
      - .env
    command: /usr/local/bin/gunicorn etandme.wsgi:application -w 2 -b :8000

 nginx:
    restart: always
    build: ./nginx
    ports:
      - 80:80
    volumes_from:
      - web
    links:
      - web:web


错误日志看起来有点像这样:

"GET /static/js/creative.js HTTP/1.1" 200 1860 "http://104.236.29.80/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko)
[error] 7#0: *7 open() "/usr/src/app/personal/static/img/Monkeypod.jpg" failed (2: No such file or directory), client: 98.151.113.208, server: 159.203.166.130, request: "GET /static/img/Monkeypod.jpg HTTP/1.1", host: "104.236.29.80", referrer: "http://104.236.29.80/"


我可以确认我已经从命令行在 Web 容器中运行“collectstatic”,并且终端确认 img 文件已被复制到静态根目录 (/usr/src/app/personal/static/)。

我完全不明白为什么只有一部分静态文件可以使用,特别是因为它们都位于同一个目录中,并且使用相同的语法在 Django 后端引用。

非常感谢您付出的时间和关注!

答案1

发现问题了!

出于某种原因,当我在生产服务器(Digital Ocean Docker droplet)上运行 collectstatic 时,.jpg 文件会被复制到带有 .JPG 扩展名的静态根目录中。

对我的 Django 模板进行一些更改并将模板标签中的 .jpg 替换为 .JPG 后,现在一切都正常了。

相关内容