65

Vagrant を使用して、Apache2 で Ubuntu を利用した VirtualBox を実行しています。

とりわけ、Web サーバーは、私の /vagrant ディレクトリから静的ファイルを提供します。

これはほとんどの場合うまく機能します。しかし、共有フォルダーの画像を変更して Web サイトをリロードすると、以前のバージョンの画像が提供されますが、切り捨てられます。

最初に共有フォルダーから古い画像を削除し、Web サイトを更新して画像が表示されないようにしてから、新しいファイルを保存して Web サイトを再度リロードすると機能します。

誰もこの問題について知っていましたか?mod_rewrite を備えた Apache 2 と、Mongo を備えた PHP、APC プラグイン、MongoDB、および一連のスクリプトを備えた nodeJS だけです。

4

6 に答える 6

133

ここで答えを見つけました:

JC、

これはおそらく、静的ファイルを提供するサーバーが "sendfile()" syscall を使用しているためです。これは、VirtualBox ファイル システムで壊れています。サーバーで sendfile() の使用を無効にする必要があります。アパッチの場合:

EnableSendfile オフ

nginx の場合: sendfile off;

ベスト、ミッチェル

于 2012-02-28T10:22:47.630 に答える
8

これは私を夢中にさせてきました!このフィリップを投稿してくれてありがとう。構成ファイルを変更する方法がわからない人のために、私がやったことは次のとおりです。

ファイルを見つけるには:$ sudo find -name "nginx.conf"

私はここにいました:./etc/nginx/nginx.conf

だから私はそれを変更するためにこれを実行しました:$ sudo nano ./etc/nginx/nginx.conf

を含む行を変更しsendfile on;ますsendfile off;

exitとを忘れないでくださいvagrant reload

于 2015-10-08T17:20:51.627 に答える
6

これは VirtualBox の古いバグ ( #819#9069#12597#14920を参照) で、vboxvfs は同期されたファイルへの mmaped アクセスに問題があるようです。

これは、VM の外部でファイルを編集し、VM 内で同じ変更が行われることを期待している場合に発生する可能性があります。

この問題を回避するには、vhosts ファイル内または vhosts ファイル内のEnableSendfileオプションを無効にして、クライアントにファイルを配信するカーネル sendfile サポートを無効にする必要があります。httpd.conf

<Directory "/path-to-nfs-files">
  EnableSendfile Off
</Directory>

これは、NFS または SMB でマウントされたファイルの場合に特に問題になります。変更後、Apache をリロードします。

Nginx(で)に似ていnginx.confます、例えば

sendfile off;

その他の回避策として、ホスト上のファイルを編集しないようにするか、VM 内で同じファイルを再編集してみてください。


別の回避策には、Linux ページキャッシュの削除が含まれます。

echo 1 > /proc/sys/vm/drop_caches

または、毎秒キャッシュをクリアするには (この投稿に従って)、試してください:

watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)

注: 番号 1 はページキャッシュの解放、2 は dentry と inode の解放、3 はページキャッシュ、dentry と inode の解放を表します。


上記の問題は、次の mmap-test プログラムで再現できますmmap-problem.c

于 2016-05-09T15:17:41.223 に答える
4

VirtualBox/Docker/Nginx 環境でも同様の問題があります。

Linux ページキャッシュを削除するという決定はecho 1 > /proc/sys/vm/drop_caches問題なく機能しますが、見栄えが悪くなります。

また、 のディレクティブsendfile off;nginx.conf問題を解決せず、ディレクティブと一緒に使用しようとしexpires off;ましたが、成功しました。

だから、私の決定は次のようになります

sendfile off;
expires off;
于 2016-12-29T13:24:35.573 に答える
0

これは、CentOS/VirtualBox セットアップでの CSS ファイルに関する奇妙な動作の原因でもありました。

/vagrant フォルダー内の CSS ファイルの内容を変更すると、ブラウザーは (304 ではなく) 200 のステータスを表示します。これは、ファイルが新しいことを認識していたことを意味します。でも中身は変わらないはず。

于 2016-03-09T23:24:13.173 に答える