Cómo limpiar la caché de Nginx en Vagrant

Vagrant, VirtualBox y Nginx dan problemas cuando funcionan juntos y puedes estar sirviendo archivos corruptos en tu web. Soluciónalo configurando el módulo Sendfile.

Cómo limpiar la caché de Nginx en Vagrant

Vagrant es probablemente una de las herramientas que más utilizo a la hora de desarrollar y crear aplicaciones porque me permite crear todas las máquinas virtuales que quiera, reiniciarlas, eliminarlas, configurarlas a mi gusto y, al fin y al cabo, hacer lo que quiera con ellas.

En mi caso, el mayor uso que le doy a Vagrant es para el desarrollo de Geeky Theory, cuyo código utiliza el framework Laravel. Aparte de eso, Geeky Theory funciona a día de hoy con PHP 7, Nginx y MySQL, entre otras muchas cosas, y esa configuración del servidor la hago con Ansible.

Es muy importante tener un servidor de desarrollo que sea igual que el que haya en producción, pero a veces hay algunas diferencias simplemente por la plataforma en la que se aloja una máquina virtual. En local utilizo VirtualBox sobre Linux, pero en producción utilizo Digital Ocean (con este enlace tienes 100$ de regalo durante 60 días), y eso hace que aunque la máquina virtual tenga exactamente la misma configuración, el sistema sobre el que se ejecuta sea diferente.

Esto me llevó a un problema con la caché de Nginx en Vagrant que en producción no tenía, y es que cuando modificaba un archivo JavaScript Chrome me lanzaba un error diciendo que el código que recibía era:

��������������

En principio pensaba que era un problema con mi editor (PHPStorm o Visual Studio Code), pero luego vi que era una configuración propia de Nginx. Para arreglar esto, simplemente debes añadir lo siguiente en tu archivo de configuración de Nginx:

sendfile off;

Nginx tiene muy buena fama por lo bien que funciona enviando archivos estáticos y con el parámetro Sendfile a on me estaba encontrando que Nginx siempre servía una versión antigua o corrupta de mis archivos JavaScript o CSS, mientras que con el parámetro a off, siempre devolvía la versión actualizada.

Aparentemente es un problema que ocurre cuando Nginx se ejecuta en VirtualBox y lleva reportado varios años (!), pero con este fix, queda todo arreglado. En el repositorio de Vagrant también está la solución por si te ocurre con Apache.