在Debian上使用Django + FastCGI通过Nginx服务静态文件

1 投票
4 回答
3138 浏览
提问于 2025-04-16 21:27

我对django 1.3中静态文件服务的新方式有点生疏,但我相信问题不在django上。

我正在尝试在一个安装了debian的云服务器上运行一个django应用,使用的是nginx和fastcgi。现在我们只有一台服务器(在开发阶段),以后会考虑使用负载均衡器来简化多个服务器的管理,但我现在遇到了让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未找到的错误。

文件结构如下:

/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/"

如果有人能告诉我该怎么处理这个问题,那就太好了。

4 个回答

1

看看使用'root'和'alias'之间的区别。简单来说,当你使用'root'时,'location'后面的路径(比如/static/)会被加到路径后面;而如果使用'alias',这个路径就会被忽略掉。

3
root /static

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

1

根据上面Jim的回答,问题已经解决了。

root /static 

现在已经改成:

root /home/user/site/static

不过在查看日志时,发现nginx试图找到的路径是 http://127.0.0.1/static,但实际路径是 /home/user/site/static/static/,这显然是错误的。

我不确定这是不是正确的方法,但现在我把所有静态文件都指向根目录(这样就不需要在网址中加/static了)。所以对于/static/images,我现在直接指向 http://127.0.0.1/images/

撰写回答