由于某种原因,我的 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 后,现在一切都正常了。