我使用WordPress作为主页(mysite.com)和其余的Django(mysite.com/pages)。我有两个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位置。
我可以删除缓存位置,并在/ static / expires 7d;
中添加location
。这将只在相反的缓存中只有Django的静态文件。
但是如何让这两个静态资源缓存一周呢?
答案 0 :(得分:0)
最后,我能够缓存Wordpress和Django的静态文件。
对于以/static/
开头的请求,我找到了一种方法可以让Nginx使用/static/
location
而不是常规静态文件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/...
的所有请求都将与/ static / location匹配,并且不会继续到任何其他正则表达位置。
例如mysite.com/wp-content/themes/a-theme/style.css?ver=4.7.2
的请求
将匹配正则表达式位置。