Ми використовуємо 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 Не змінено до тих пір, поки файл не буде змінено, і відповідь на 200 ОК із модифікований файл при зміні файлу.
Однак, схоже, поводиться по-різному з файлом Javascript або CSS. Як тільки файл буде змінено, ми отримаємо відповідь на 200 ОК, як очікувалося, але зі старим текстом.
Чи є в 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 Hates Sendfile дало мені рішення: вимкніть прапор Sendfile у конфігурації сервера на вимкнено :
sendfile off;
Сподіваюсь, це також може допомогти іншій людині, яка використовує VirtualBox для розробки. :)
На форумі VirtualBox є додаткова інформація .