cpj*_*eur 7 ruby-on-rails nginx
我似乎无法让nginx在我的Rails应用程序中的静态资产上设置expires标头.
我的应用程序使用Phusion Passenger&nginx进行部署.
下面是我的nginx配置文件的相关部分
server {
listen 80;
server_name my.domain.tld;
root /home/deploy/my.domain.tld/current/public;
passenger_enabled on;
access_log off;
location ~* \.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
expires max;
break;
}
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html break;
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么它的设置不会在我的静态资产上过期(例如/images/foo.png?123456)
我不确定它是否与乘客有关,或者我的位置regexp是不是没有抓住它
dja*_*ski 10
只是想指出使时间戳可选是一个坏主意 - 如果它没有包含,那么设置expires max是错误的,因为没有办法刷新文件.
此外,locationNginx中的指令无法查看查询字符串,因此此处发布的解决方案永远不会匹配"可选"时间戳.
一个适当的解决方案(即只有在使用时间戳请求文件时才发送最大值的解决方案)将是:
location ~* \.(js|css|png|jpg)$ {
if ($query_string ~ "^[0-9]+$") {
expires max;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如果未指定时间戳,则依赖于Last-Modified和ETagNginx自动处理的.
所以我最终找到了解决方案.我的regexp有点偏,因为我没有考虑到时间戳不存在的可能性.
这个正则表达式对我有用.
location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8433 次 |
| 最近记录: |