出于某种原因,我的CSS,JS和Font-Awesome静态资产被识别并正常使用,但是我的img静态文件在Nginx Docker容器日志中显示了404错误。
当我在本地构build这些容器时,一切正常,但是一旦我在Digital Ocean上构build,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构build的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”,并且terminal确认img文件已经被复制到静态根目录(/ usr / src / app / personal / static /)。
我完全失去了为什么只有一部分静态文件将被提供,特别是因为它们都位于相同的目录中,并在Django后端以相同的语法引用。
感谢您的时间和关注!
发现问题!
出于某种原因,当我在生产服务器(Digital Ocean Docker droplet)上运行collectstatic时,.jpg文件被复制到具有.JPG扩展名的静态根目录中。
在对我的Django模板进行一些更改并在模板标签中用.JPG交换.jpg之后,现在一切都正常。