我使用WordPress作为主页(mysite.com),其余部分使用Django (mysite.com/ page )。我有一个nginx配置文件,这两个文件和它的工作良好。此外,它们驻留在一个server
块中。
下面是我配置的一些部分:
server {
...
root /var/www/wordpress;
...
location /static/ {
alias /home/username/Env/virtenv/mysite/static/;
}
}
有了这一点,WordPress和Django静态文件都会得到服务。现在我想在浏览器中缓存所有静态文件7天。如果我把这个加在一起:
location ~* \.(jpg|jpeg|png|svg|gif|ico|css|js)$ {
expires 7d;
}
然后正确缓存WordPress静态文件,但却没有为Django的静态文件提供服务。
我知道这是因为从未到达/static/
位置,然后Nginx在root
指令中搜索了Django的文件,该指令位于server
块级别,指向WordPress位置。
我可以删除缓存位置,并在/ expires 7d;
/ location
中添加location
。这将在相反的缓存中只缓存Django的静态文件。
但是,如何使两个静态资源都缓存一周呢?
发布于 2017-03-01 20:06:35
最后,我能够缓存两个静态文件- Wordpress和Django。对于以/static/
开头的请求,我找到了一种使/static/
location
使用Nginx的方法,而不是一般的静态文件location
,后者的目的是只缓存Wordpress静态文件。
它是如此简单:只需使用位置修饰符^~
。
正如DigitalOcean的这篇精彩文章所言:
块修饰符
^~
意味着如果选择这个块作为最佳的非正则表达式匹配,正则表达式匹配就不会发生。
以下是两个位置块的工作版本:
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位置匹配。
https://stackoverflow.com/questions/42492931
复制相似问题