Django Nginx 浏览器缓存配置

Posted

技术标签:

【中文标题】Django Nginx 浏览器缓存配置【英文标题】:Django Nginx Browser Caching Configuration 【发布时间】:2015-02-15 00:04:51 【问题描述】:

我正在尝试配置 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-error 日志显示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】:

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

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

您缺少图像位置块的根指令。 因此,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;
    

...

一切都很好。

希望有同样问题的人可以借鉴一下。

【讨论】:

感谢分享,但在生产中对我不起作用。它在我的本地生产环境中工作,但在真正的生产环境中,它不起作用。我表示文件扩展名已被缓存,但 nginx 实际上无法加载文件以设置我的页面样式。

以上是关于Django Nginx 浏览器缓存配置的主要内容,如果未能解决你的问题,请参考以下文章

Nginx——nginx作为静态资源web服务(浏览器缓存示例演示)

浏览器缓存机制与Nginx配置调优

Django缓存:缓存预热时重新加载浏览器缓存

Nginx 配置页面缓存

Nginx配置静态文件(浏览器的缓存)

nginx配置管理浏览器静态缓存策略