NGINX 不提供收集的静态文件
Posted
技术标签:
【中文标题】NGINX 不提供收集的静态文件【英文标题】:NGINX does not serve the collected static files 【发布时间】:2021-05-08 11:11:19 【问题描述】:我在 AWS EC2 实例上运行 dockerized Django 应用程序,并且页面加载时没有静态文件,即使 nginx 已收集它们。我觉得这很奇怪,因为它直到现在才发生在我身上(至少在我的本地机器上)。如果您能帮我解决这个问题,我们将不胜感激。
这是我的docker-compose.yml
文件:
version: "3"
services:
web:
restart: always
build: .
command: bash -c "
python manage.py makemigrations &&
python manage.py migrate &&
python manage.py creategroups &&
python manage.py initializesuperuser &&
python manage.py collectstatic --noinput &&
daphne -b 0.0.0.0 -p 80 DL.asgi:application"
expose:
- 80
environment:
- DJANGO_SETTINGS_MODULE=DL.production_settings
volumes:
- static_volume:/usr/src/app/DL/static/
- media_volume:/usr/src/app/media_cdn
nginx:
restart: always
build: ./nginx
ports:
- "80:80"
volumes:
- static_volume:/static/
- media_volume:/media/
depends_on:
- web
volumes:
static_volume:
media_volume:
这里是production_settings.py
:
STATIC_URL = '/static/'
STATIC_ROOT = "/usr/src/app/DL/static/"
web
容器内的文件结构的 sn-p(DL_app
是 Django 应用程序的名称):
usr
|
|──src
|
|──app
|
|──DL
|
|──DL
|
|──DL_app
| |
| |──static
|
|──manage.py
|
|──static
最后,这是nginx.conf
:
upstream web
server web:80;
server
listen 80;
location /
proxy_pass http://web;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
location /static/
alias /usr/src/app/DL/static/;
location /protected/
alias /media/;
【问题讨论】:
【参考方案1】:您已在nginx
容器中的/static
路径中挂载静态文件:
nginx:
restart: always
build: ./nginx
ports:
- "80:80"
volumes:
- static_volume:/static/ # here
但是您的 NGINX 配置定义它们位于 /usr/src/app/DL/static/
location /static/
alias /usr/src/app/DL/static/; # there is no such path in NGINX container
#alias /static/; # this should work
【讨论】:
以上是关于NGINX 不提供收集的静态文件的主要内容,如果未能解决你的问题,请参考以下文章
带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件