VirtualBoxにCentOSなどのLinux環境を構築し、そこへApacheやらデータベースサーバやらをインストールしてWebアプリの開発を行うことがよくあります。
その際に、ホストのディレクトリを共有フォルダ設定してマウントパスをApacheのDocumentRootに指定すると便利に開発できるかと思います。
・・・が、しかし、今日その設定を行ってみてブラウザで表示を確認してみたところ、なぜか静的コンテンツがまともに表示されません・・・。
まっしろになってしまったり、更新したはずなのに古いものが表示されたり・・・。一体原因はなんなんでしょうか。。
EnableSendfile
Apacheの設定ファイル、httpd.confのcache関係のモジュールをオフにしたりといろいろとやってみましたが、全く変化ありません。
あきらめかけていたのですが、Live HTTP Headersでヘッダを見てみたところ、静的コンテンツが、206 Partial Content というレスポンスになっていることが分かりました。
このレスポンスコードをたよりに色々と検索してみると、どうやら EnableSendfile ディレクティブをオフにすればよいらしいことが分かりました。
さらに、このディレクティブについて調べてみると、
ネットワークマウントされた DocumentRoot (例えば NFS や SMB) では、カーネルは自身のキャッシュを使ってネットワークからのファイルを 送ることができないことがあります。
とあり、まさに今の症状の通りでしたので設定してみると・・・。
うまくいきました!!
もし、同じような状況に直面している人がいたらお役に立てば嬉しいです。
最高です!
同じ問題で躓いてました。
ありがとうございます。
コメントありがとうございます。
ついでに、EnableMMAP Off も追加しておくとなお良いと思います!