【问题标题】:cannot server static files with nginx in django无法在 Django 中使用 nginx 服务静态文件
【发布时间】:2017-12-04 15:42:42
【问题描述】:

我正在使用 nginx 作为 Web 服务器运行 django。配置后,我似乎总是得到 404 的静态文件。这是我的配置

base.py

STATIC_ROOT = os.path.join(PROJECT_DIR, "static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(PROJECT_DIR, 'static_files'),
]

nginx.conf

    upstream django {
        server unix:///tmp/mysite.sock;
    }


    # configuration of the server
    server {
        listen  5000;
        server_name server localhost:5000;  address or FQDN
        charset     utf-8;
        client_max_body_size 75M;   

      location /static {
        alias /Users/del/projects/app-backend/static/; 
      }

      location ~ ^/(images|javascript|js|css|flash|media|static)/  {
        autoindex on;
        root /Users/del/projects/app-backend/static/; 
      }

      location / {
        uwsgi_pass  django;
        include     /Users/del/perso/django/library/uwsgi;

       } 
    }

我已经确定运行python manage.py collectstatic,文件实际上是在/static/文件夹下生成的

【问题讨论】:

  • 你用过collectstatic吗?
  • 是的,我做到了,而且我已经在我的问题中写了。

标签: python django nginx uwsgi django-staticfiles


【解决方案1】:

你似乎猜到了 nginx 应该做什么,但不明白 alias 和 root 是如何工作的:

root 设置该位置的父目录。父目录中必须存在同名物理目录:

root    /var/www
directory     |----- /static
file                    |----- image.jpg

location /staticroot /var/www 现在将提供来自 /var/www/static 的文件。 URL http://example.com/static/image.jpg 将服务于/var/www/static/image.jpg

结构相同,但 location /salias /var/www/static 现在将提供来自 /var/www/static 的文件。 URL http://example.com/s/image.jpg 将服务于/var/www/static/image.jpg

所以你的简单配置是:

server {
    root /var/www; # Set root at server level

    location /static {
        expires max;
    }

    location / {
        uwsgi_pass django;
    }
 }

我不知道您需要正则表达式做什么。如果您在模板中始终使用 Django 的static 标签,则无需匹配“/images”等。

最后,由于 static 在正则表达式中,并且正则表达式模式优先于字符串匹配,因此您在 URL 中对 /static/ 的所有引用都将在 app-backend/static/static 中查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2018-08-31
    • 2020-05-18
    相关资源
    最近更新 更多