Django没有从Docker容器中的Nginx加载静态

mklgxw1f  于 2023-10-16  发布在  Docker
关注(0)|答案(1)|浏览(129)

django服务器无法加载静态文件,但可以通过URL直接访问它们。
我有一个django服务器,由gunicorn在docker容器中提供服务。
My Django static sttings.py:

STATICFILES_DIRS = [
    (os.path.join(BASE_DIR, "static")),
]

STATIC_URL = "/static/"
STATIC_ROOT = os.path.abspath(os.path.join(BASE_DIR, "../static"))

我的Nginx配置:

http {
    sendfile on;
    

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://gunicorn:8000;
        }
        location /static/ {
            autoindex on;
            alias /static/;
        }
    }
}

我的nginx docker-compose配置:

nginx:
    image: nginx:1.19.6-alpine
    depends_on:
      - gunicorn
    ports:
      - "80:80"
    expose:
      - "80"
      - "443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
      - nginx_static:/static

当我在调试模式下启动django服务器时,文件在localhost:8000加载,gunicorn容器在那里,但它们在localhost:80不可用,我的nginx容器在那里。
当我在调试关闭状态下启动它时,根本不会加载静态文件。
当我试图通过nginx访问静态文件时,例如。localhost:80/static/my_static.css文件加载
我想这可能是我的django设置的问题,因为在html模板中调用静态,比如:{% static 'img/logo.png' %}将加载该图像,但没有我的其他css文件将加载,即使{% load static %}是在每个模板
任何帮助都非常感谢

xuo3flqw

xuo3flqw1#

原来nginx是作为一个文本文件而不是css文件来提供我的css的。修复了包含MIME类型include /etc/nginx/mime.types;

http {
    sendfile on;
    

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://gunicorn:8000;
        }
        location /static/ {
            include  /etc/nginx/mime.types;
            autoindex on;
            alias /static/;
        }
    }
}

相关问题