Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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 を使っている場合は、共有フォルダ内の「ファイルの更新がかかった!」という通知が
うまく行かない場合があるらしく、おかしな状況になってしまうというわけのようである。

dojineko
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした