Nginxを使用して、開発プラットフォームで静的ファイルを提供しています。開発プラットフォームであるため、キャッシュを無効にして、各変更がサーバーに伝播されるようにします。VHostの構成は非常に簡単です。
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
HTMLファイル(http://static.server.local/test.html)にアクセスする場合、問題はありません。ファイルが変更されていない限り、サーバーは304 Not Modifiedを返し、200 OK応答を返します。ファイルが変更されたときに変更されたファイル。
ただし、JavascriptまたはCSSファイルでは動作が異なるようです。ファイルが変更されると、予想どおり200 OK応答が返されますが、古いテキストが含まれています。
この動作を説明できるNginxの内部キャッシュメカニズムはありますか?または追加する必要のある構成はありますか?
補足として、ファイルが変更されたときにNginxによって返されるヘッダーを次に示します(正しいようです)。
Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54
編集ディレクティブとヘッダーで
さまざまな設定を試した後、さらに調査を行いました。実際、サーバーはVirtualBoxゲストUbuntuにインストールされ、データはMac OSXホスト上にある共有フォルダーから読み取られます。
ホスト上のIDE(NetBeans)からファイルを編集すると、変更が表示されないように見えますが、ゲスト上で直接(VIMを使用して)編集すると、更新されます。
奇妙なことに、HTMLファイルでは同様に動作しません。
かなり不可解です。expires
Cache-Control
編集2(ANSWER)
実際、問題の原因はVirtualBox側にありました。または、VirtualBoxとサーバーの「sendfile」オプションとの競合。
このVirtualBox Hates Sendfileリンクは、解決策を提供しました。サーバー構成のsendfileフラグをoffに切り替えます。
sendfile off;
これが開発にVirtualBoxを使用している他の人にも役立つことを願っています。:) VirtualBoxフォーラム
には追加情報があります。