network - Vagabundo/VirtualBox/Apache2 Extraño comportamiento de caché
vagrant virtualbox (6)
¡Esto me está volviendo loco! Gracias por publicar esto Philipp. Para aquellos de ustedes que no tienen idea de cómo cambiar el archivo de configuración, esto es lo que hice:
Para encontrar el archivo: $ sudo find -name "nginx.conf"
El mío estaba aquí: ./etc/nginx/nginx.conf
Así que ejecuté esto para modificarlo: $ sudo nano ./etc/nginx/nginx.conf
Cambie la línea que contiene sendfile on;
sendfile off;
¡No te olvides de exit
y vagrant reload
!
Estoy usando Vagrant para ejecutar un VirtualBox con Ubuntu y Apache2.
El servidor web, entre otros, sirve archivos estáticos de mi directorio / vagabundo.
Esto funciona bien la mayor parte del tiempo. Pero cuando cambio una imagen en mi carpeta compartida y vuelvo a cargar el sitio web, se sirve la versión anterior de la imagen, pero se trunca.
Funciona si elimino primero la imagen anterior de mi carpeta compartida, actualizo el sitio web para que NO se muestre la imagen, luego guardo el nuevo archivo y vuelvo a cargar el sitio web.
¿Alguien sabe acerca de este problema? No tengo nada especial instalado, solo Apache 2 con mod_rewrite y PHP con Mongo, APC Plugin, MongoDB y nodeJS con un conjunto de scripts.
Encontré la respuesta here :
JC,
Lo que está viendo probablemente se deba a que el servidor que sirve los archivos estáticos está utilizando el sistema llamado "sendfile ()", que está roto con el sistema de archivos VirtualBox. Necesita deshabilitar el uso de sendfile () en su servidor. Para Apache:
EnableSendfile desactivado
Y para nginx: sendfile off;
Mejor, Mitchell
Este es un viejo error en VirtualBox (ver: #819 , #9069 , #12597 , #14920 ) donde vboxvfs parece tener algunos problemas con el acceso mmapped a los archivos que están sincronizados.
Esto puede suceder cuando edite el archivo fuera de la máquina virtual y espere ver el mismo cambio dentro de la máquina virtual.
Para solucionar este problema, debe deshabilitar la compatibilidad de kernel sendfile para entregar archivos al cliente deshabilitando la opción EnableSendfile
, ya sea en httpd.conf
o en el archivo vhosts, por ejemplo
<Directory "/path-to-nfs-files">
EnableSendfile Off
</Directory>
Esto es especialmente problemático para archivos montados en NFS o SMB. Después del cambio, recarga el Apache.
Similar para Nginx
(en nginx.conf
), por ejemplo
sendfile off;
Otra solución es recordar no editar los archivos en el host, o intentar reeditar el mismo archivo, pero dentro de la VM.
Otra solución incluye eliminar el caché de páginas de Linux, por ejemplo
echo 1 > /proc/sys/vm/drop_caches
O para borrar los cachés cada segundo (según esta publicación ), intente:
watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)
Nota: El número 1 representa la liberación del caché de páginas, 2 para dentries e inodos, 3 para pagecache, dentries e inodes.
El siguiente problema puede ser replicado por el siguiente programa mmap-test, ver: mmap-problem.c
.
Esto también fue responsable del comportamiento extraño con respecto a los archivos CSS en una configuración de CentOS / VirtualBox.
Podría cambiar el contenido de un archivo CSS en la carpeta / vagabundo, y el navegador mostraría un Estado de 200 (en lugar de un 304), lo que significa que sabía que el archivo era nuevo. Pero el contenido no habría cambiado.
Para cualquiera que use Laravel 5, Barryvdh''s Debugbar y browserSync a través de gulp.watch, puede obtener este error. Tenía exactamente el mismo error debido a cómo el navegador Sync estaba aprobando mi solicitud. Si veo mi servidor de desarrollo a través de: http://127.0.0.1:3000/laravel/page me http://127.0.0.1:3000/laravel/page el error http://127.0.0.1/laravel/page error.
Lo he marcado con nuestros amigos en browserSync, hacen un trabajo increíble. Por lo tanto, es más una razón que una solución, pero en lugar de pasar horas tratando de arreglarlo, prueba para ver si este es tu problema antes de perder más tiempo.
Este problema también es similar a los errores encontrados en este artículo
Tengo un problema similar con el entorno VirtualBox / Docker / Nginx.
La decisión de eliminar el caché de páginas de Linux echo 1 > /proc/sys/vm/drop_caches
funciona bien pero parece incómodo.
También la directiva sendfile off;
en el nginx.conf
no resolvió el problema e intenté usarlo expires off;
directiva juntos y fue exitoso.
Entonces, mi decisión parece
sendfile off;
expires off;