Django nginx staticfiles 404



我正在尝试了解nginx在https代理后面提供Dockerized Django静态文件。

我试着遵循这个教程:https://testdriven.io/blog/django-lets-encrypt/

这一切都在我的本地机器上工作,所以我转移到运行在https反向代理后面的真实域的远程服务器。

我有一个dock -compose。像这样:

backend:
container_name: backend
build: ./backend
command: gunicorn directorybackend.wsgi:application --bind 0.0.0.0:8000
stdin_open: true # docker run -i
volumes:
- ./backend/:/code/
- static_volume:/code/staticfiles
- media_volume:/code/mediafiles
expose:
- 8000
depends_on:
- db
environment:
- VIRTUAL_HOST=mydomain.com
- VIRTUAL_PORT=8000
- LETSENCRYPT_HOST=mydomain.com
env_file:
- ./env/.env.beta
nginx-proxy:
container_name: nginx-proxy
build: nginx
restart: always
ports:
- 443:443
- 80:80
volumes:
- static_volume:/code/staticfiles
- media_volume:/code/mediafiles
- certs:/etc/nginx/certs
- html:/usr/share/nginx/html
- vhost:/etc/nginx/vhost.d
- /var/run/docker.sock:/tmp/docker.sock:ro
depends_on:
- backend
acme-companion:
image: nginxproxy/acme-companion
container_name: nginx-proxy-acme
env_file:
- ./env/.env.beta.proxy-companion
volumes_from:
- nginx-proxy
volumes:
- certs:/etc/nginx/certs:rw
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
depends_on:
- nginx-proxy
volumes:
postgres_data:
static_volume:
media_volume:
certs:
html:
vhost:
acme:

也有postgres服务和VUE前端,但它们不与上面的共享卷。

我在vhost中有一个default文件。d目录下面的指令:

location /static/ {
alias /code/staticfiles/;
add_header Access-Control-Allow-Origin *;
}
location /media/ {
alias /code/mediafiles/;
add_header Access-Control-Allow-Origin *;
}

我的nginx docker文件如下:

FROM jwilder/nginx-proxy:0.9
COPY vhost.d/default /etc/nginx/vhost.d/default
COPY custom.conf /etc/nginx/conf.d/custom.conf

my Django settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'

我正在收集后端引导的文件,如果我执行backendnginx-proxy服务,我可以在正确的位置找到我的文件:

/code/staticfiles/... # all the files are here in the right place...

所以我"假设;

/vhosts.d/default也出现在正确的位置,当我登录到nginx服务。

HTTPS反向代理效果很好。我的后端是一个API,对它的调用工作得很好。我只是没有静态文件的管理区域。

静态文件返回404错误。

除了加载静态资源的404错误之外,没有其他错误被抛出。我做错了什么?

更多信息:

我在nginx日志中发现了这个错误:

2022/07/10 09:36:53 [error] 78#78: *4 open() "/home/backend/web/staticfiles/admin/js/nav_sidebar.js" failed (2: No such file or directory), 

这是超级混乱,因为我没有定义路径-/home/backend/web/staticfiles-任何地方我可以找到…在settings.py中更改STATIC_ROOT以匹配该路径也不起作用。

nginx在任何地方定义默认路径吗?

我必须销毁所有与nginx相关的映像和卷并重新构建它们。

就可以了。重建没有足够的

最新更新