首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nginx缓存来自不同aplications的静态文件

Nginx缓存来自不同aplications的静态文件
EN

Stack Overflow用户
提问于 2017-02-27 18:15:00
回答 1查看 1.6K关注 0票数 1

我使用WordPress作为主页(mysite.com),其余部分使用Django (mysite.com/ page )。我有一个nginx配置文件,这两个文件和它的工作良好。此外,它们驻留在一个server块中。

下面是我配置的一些部分:

代码语言:javascript
运行
复制
server {
    ...
    root /var/www/wordpress;
    ...
    location /static/ {
        alias  /home/username/Env/virtenv/mysite/static/;
    }
}

有了这一点,WordPress和Django静态文件都会得到服务。现在我想在浏览器中缓存所有静态文件7天。如果我把这个加在一起:

代码语言:javascript
运行
复制
location ~*  \.(jpg|jpeg|png|svg|gif|ico|css|js)$ {
    expires 7d;
}

然后正确缓存WordPress静态文件,但却没有为Django的静态文件提供服务。

我知道这是因为从未到达/static/位置,然后Nginx在root指令中搜索了Django的文件,该指令位于server块级别,指向WordPress位置。

我可以删除缓存位置,并在/ expires 7d; / location中添加location。这将在相反的缓存中只缓存Django的静态文件。

但是,如何使两个静态资源都缓存一周呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-01 20:06:35

最后,我能够缓存两个静态文件- Wordpress和Django。对于以/static/开头的请求,我找到了一种使/static/ location使用Nginx的方法,而不是一般的静态文件location,后者的目的是只缓存Wordpress静态文件。

它是如此简单:只需使用位置修饰符^~

正如DigitalOcean的这篇精彩文章所言:

块修饰符^~意味着如果选择这个块作为最佳的非正则表达式匹配,正则表达式匹配就不会发生。

以下是两个位置块的工作版本:

代码语言:javascript
运行
复制
location ~*  \.(?:jpg|jpeg|png|svg|gif|ico|css|js)$ {
    # Cache Wordpress or any other public static files
    # of those types for a week in the browser
    expires 7d;
}

location ^~ /static/ {
    alias  /home/username/Env/virtenv/mysite/static/;
    # Cache Django's static files for a week in the browser
    expires 7d;
}

使用mysite.com/static/...的所有请求都将匹配/静态/位置,并且不会继续到任何其他regex位置。

例如,mysite.com/wp-content/themes/a-theme/style.css?ver=4.7.2的请求将与regex位置匹配。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42492931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档