Django Nginx浏览器缓存配置

时间:2014-12-16 15:57:30

标签: django caching nginx browser-cache django-staticfiles

我正在尝试配置Nginx以利用浏览器上的静态文件缓存。 我的配置文件如下

server {

    listen   80;
    server_name localhost;

    client_max_body_size 4G;

    access_log /home/user/webapps/app_env/logs/nginx-access.log;
    error_log /home/user/webapps/app_env/logs/nginx-error.log;

    location /static/ {
        alias   /home/user/webapps/app_env/static/;
    }

    location /media/ {
        alias   /home/user/webapps/app_env/media/;
    }
...
}

当我添加以下缓存配置时,服务器无法加载静态文件,我无法重新启动我的Nginx。

location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 365d;
}

nginx错误日志显示open() "/usr/share/nginx/html/media/cover_photos/292f109e-17ef-4d23-b0b5-bddc80708d19_t‌​humbnail.jpeg" failed (2: No such file or directory)

我在网上做了很多研究,但无法解决这个问题。

任何人都可以帮助我或者只是给我一些关于在Nginx中实现静态文件缓存的建议吗? 谢谢!

参考:Leverage browser caching for Nginx

1 个答案:

答案 0 :(得分:2)

同样,我必须回答我自己的问题。 根本问题在于“路径”。

我从@Dayo找到答案,我在这里引用:

  

您缺少图像位置块的rootdirective。   因此,nginx将在默认位置查找文件   因安装而异,因为您很可能没有放置   那里的文件,你会得到404 Not Found错误。

Answer from Dayo

因此,我在配置文件中添加了根路径,如下所示:

root /home/user/webapps/app_env/;

整个配置如下所示:

server {

    listen   80;
    server_name localhost;

    root /home/user/webapps/app_env/;

    client_max_body_size 4G;

    access_log /home/user/webapps/app_env/logs/nginx-access.log;
    error_log /home/user/webapps/app_env/logs/nginx-error.log;

    location /static/ {
       alias   /home/user/webapps/app_env/static/;
    }

    location /media/ {
       alias   /home/user/webapps/app_env/media/;
    }

    location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
       expires 365d;
    }

...
}

一切都很好。

我希望有同样问题的人可以从中吸取教训。