我似乎无法让Nginx在我的Rails应用程序中的静态资产上设置expires标头.
@H_403_2@我的应用程序使用Phusion Passenger& Nginx的.
@H_403_2@下面是我的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; } }@H_403_2@我不确定为什么它的设置不会在我的静态资产上过期(例如/images/foo.png?123456) @H_403_2@我不确定它是否与乘客有关,或者我的位置regexp是不是没有抓住它
解决方法
只是想指出使时间戳可选是一个坏主意 – 如果它没有包含,那么设置expires max是错误的,因为没有办法刷新文件.
@H_403_2@此外,Nginx中的location指令无法查看查询字符串,因此此处发布的解决方案永远不会匹配“可选”时间戳.
@H_403_2@一个适当的解决方案(即只有在使用时间戳请求文件时才发送最大值的解决方案)将是:
location ~* \.(js|css|png|jpg)${ if ($query_string ~ "^[0-9]+$") { expires max; break; } }@H_403_2@如果未指定时间戳,则依赖于Last-Modified和ETag,它们由Nginx自动处理.