LoginSignup
11
12

More than 5 years have passed since last update.

Apache/Nginx のドキュメントルートを vboxsf にしてるとデータが壊れるのを何とかしたい

Last updated at Posted at 2015-07-20

Vagrant やらで Virtualbox の共有フォルダを Apache や Nginx の ドキュメントルートに設定していると、
ホスト側からファイルに更新をかけたタイミングで、ゲスト側から見えるデータに謎データが付いたり、
データが欠けたりすることで、PHPが動かなくなったり、HTMLやCSSが崩れたり。
しかもこの状態になるとVMを上げ下げしないと解消せず、開発環境としては非常に困る場面があります。

この現象はそれぞれのソフトウェアの設定により回避できます。

Apache の場合

サーバー設定ファイル、設定中の VirtualHost ディレクティブ、Directory ディレクティブ の
必要な箇所で下記を指定します。許可されていれば .htaccess でも指定が可能です。

httpd.conf
EnableSendfile off

:book: 参考ページ

Nginx の場合

Nginx の場合は、http、server、location のいずれかの必要な箇所で下記を指定します。

nginx.conf
sendfile off;

:book: 参考ページ

Sendfile とは何者なのか?

カーネルの機能の1つ。「ファイルディスクリプタ間でデータを転送する機能」らしい。。

ザックリと言うと Apache や Nginx では OS(Linuxの場合はKernel)がサポートする場合は、
sendfileという機能を使って、例えば 純粋なHTMLやCSS、画像などの静的ファイルへのアクセスなど、
OS判断で不要な場合は、ファイル読み込みをスキップし、OSでキャッシュしているデータを読むといった、
ファイルキャッシュ機能を提供してくれているらしい。

本来であればこれがうまく働くことでパフォーマンスが上がるはずだけども、
vboxsf を使っている場合は、共有フォルダ内の「ファイルの更新がかかった!」という通知が
うまく行かない場合があるらしく、おかしな状況になってしまうというわけのようである。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12