【问题标题】:Serving static files from nginx with django + fastcgi debian使用 django + fastcgi debian 从 nginx 提供静态文件
【发布时间】:2011-10-04 18:21:21
【问题描述】:

当谈到使用 django 1.3 提供静态文件的新方式时,我有点生疏了,但是我确信这不是 django 的问题。

我正在尝试在安装了 debian 的云服务器上运行带有 nginx + fastcgi 的 django 应用程序。我们目前只有一台服务器(在我们开发时),并且将寻求使用负载均衡器运行多台服务器以使其更简单一些,但是我实际上无法让 nginx 提供静态文件。

我已经按照各种教程设置 nginx.conf 来提供文件

server {
    listen 80;
    server_name 127.0.0.1;

    location /static  {
        autoindex on;
        root /static;
    }
}

以上是 nginx.conf 的摘录。现在无论我将 root 设置为什么,nginx 在尝试访问 http://127.0.0.1/static/ 时都会抛出 404 not found 错误。

文件结构如下:

/home/user/site/project
/home/user/site/static
/home/user/site/templates

Django settings.py 有以下设置为 STATIC_ROOT 和 STATIC_URL

STATIC_ROOT = "/home/user/site/static/"
STATIC_URL  = "http://127.0.0.1/static/"

如果有人能指出我们在哪里做这件事的正确方向,那就太棒了。

【问题讨论】:

    标签: python django nginx fastcgi static-files


    【解决方案1】:
    root /static
    

    这不应该是/home/user/site/static吗?

    【讨论】:

    • 你会这么认为,吉姆,但是不管我有什么设置,因为它没有工作。
    • 日志文件说什么?该目录及其父目录的权限是什么? nginx 以什么用户身份运行?
    • 静态目录是 0755 我已经将 root /static 再次更改回 /home/user/site/static ,但仍然没有乐趣。
    • 查看日志,似乎路径正试图被检查为 /home/user/site/static/static/ 奇怪的是......但在任何时候都没有定义?
    • wiki.nginx.org/NginxHttpCoreModule#root - note:请记住,根目录仍会将目录附加到请求中,因此对“/i/top.gif”的请求不会在“/spool/w3/top.gif”中查找可能发生在类似 Apache 的别名配置中,其中位置匹配本身被删除。使用 alias 指令来实现类似 Apache 的功能。
    【解决方案2】:

    根据上面 Jim 的回答找到了解决方案。

    root /static 
    

    现已改为:

    root /home/user/site/static
    

    然后检查日志,似乎 nginx 试图在 http://127.0.0.1/static 定位的路径是 /home/user/site/static/static/ 这显然是不正确的。

    我不确定这是否是正确的方法,但是我现在将所有静态文件指向根目录(消除了 url 中对 /static 的需要。所以对于 /static/images 我现在只需将其指向 http://127.0.0.1/images/ .

    【讨论】:

      【解决方案3】:

      查看root 指令的文档,与Apache 的别名指令相比,位置匹配不会被丢弃。因此,当您指定位置static 时,您定义为根的文件夹必须包含static 文件夹。所以nginx找/home/user/site/static/static是没有错的,是故意的行为。

      我什至更喜欢使用http://host/static/images 作为提供静态图像的 URL。这样,它遵循 Django 文档Managing static files,它建议为静态文件使用前缀。否则,您有多个文件夹用于不同的静态内容,使您的项目和应用程序文件夹变得混乱。

      【讨论】:

        【解决方案4】:

        检查使用“root”或“alias”之间的区别。 基本上在使用“root”的情况下,“位置”(/static/)旁边的路径会附加到路径中,而在“别名”的情况下,它将被忽略。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-27
          • 2019-05-31
          • 2021-12-02
          • 2020-09-14
          • 1970-01-01
          • 1970-01-01
          • 2021-07-18
          • 2019-02-22
          相关资源
          最近更新 更多