Мы используем Nginx для обслуживания статических файлов на платформе разработки. Поскольку это платформа разработки, мы хотели бы отключить кэширование, чтобы каждое изменение распространялось на сервер. Конфигурация VHost довольно проста:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Когда мы обращаемся к HTML-файлу ( http: //static.server.local/test.html ), у нас нет проблем: сервер возвращает код 304 Not Modified, если файл не изменен, и ответ 200 OK с измененный файл, когда файл изменяется.
Тем не менее, похоже, что с Javascript или CSS-файлом все по-другому. Как только файл будет изменен, мы получим ответ 200 OK, как и ожидалось, но со старым текстом.
Есть ли в Nginx механизм внутреннего кэша, который мог бы объяснить это поведение? Или какую-то конфигурацию, которую мы должны добавить?
Как примечание, вот заголовок, возвращаемый Nginx, когда файл был изменен (кажется правильным):
Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54
Редактировать
После пробных настроек с помощью expires
директивы и Cache-Control
заголовка я провел дальнейшие исследования. Фактически сервер установлен на гостевой Ubuntu VirtualBox, а данные считываются из общей папки, которая находится на хосте Mac OSX.
Если файл редактируется из IDE (NetBeans) на хосте, кажется, что изменения не появляются, тогда как если я редактирую его непосредственно на госте (используя VIM), он обновляется.
Странно то, что он не ведет себя аналогично с файлами HTML.
Довольно загадочно.
Редактировать 2 (ОТВЕТ)
Действительно, причина проблемы была больше на стороне VirtualBox. Или скорее конфликт между VirtualBox и опцией «sendfile» сервера.
Эта ссылка VirtualBox Ненавидит Sendfile дала мне решение: переключить SendFile флага в конфигурации сервера для отключения :
sendfile off;
Надеюсь, что это также может помочь другому человеку, использующему VirtualBox для разработки. :)
На форуме VirtualBox есть дополнительная информация .