Chúng tôi đang sử dụng Nginx để phục vụ các tệp tĩnh trên nền tảng phát triển. Vì nó là một nền tảng phát triển, chúng tôi muốn tắt bộ nhớ đệm để mỗi thay đổi được truyền đến máy chủ. Cấu hình của Vhost khá đơn giản:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Khi chúng tôi truy cập tệp HTML ( http: //static.server.local/test.html ), chúng tôi không gặp vấn đề gì: máy chủ trả về mã 304 Không được sửa đổi miễn là tệp không bị thay đổi và phản hồi 200 OK với các tập tin sửa đổi khi tập tin được thay đổi.
Tuy nhiên, nó dường như hoạt động khác với tệp Javascript hoặc tệp CSS. Khi tệp được thay đổi, chúng tôi nhận được phản hồi 200 OK như mong đợi, nhưng với văn bản cũ.
Có một cơ chế bộ nhớ cache nội bộ trong Nginx có thể giải thích hành vi này? Hoặc một số cấu hình mà chúng ta nên thêm?
Lưu ý phụ, đây là tiêu đề được Nginx trả về khi tệp đã được sửa đổi (có vẻ đúng):
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
Chỉnh sửa
Sau khi thử các cài đặt khác nhau với expires
chỉ thị và Cache-Control
tiêu đề, tôi đã thực hiện một số điều tra thêm. Trên thực tế, máy chủ được cài đặt trên Ubuntu khách VirtualBox và dữ liệu được đọc từ thư mục dùng chung trên máy chủ Mac OSX.
Nếu tệp được chỉnh sửa từ IDE (NetBeans) trên máy chủ, có vẻ như các thay đổi không xuất hiện trong khi tôi chỉnh sửa trực tiếp trên máy khách (sử dụng VIM), thì nó được làm mới.
Điều kỳ lạ là nó không hoạt động tương tự với các tệp HTML.
Khá khó hiểu.
Chỉnh sửa 2 (TRẢ LỜI)
Thật vậy, nguồn gốc của vấn đề nằm ở phía VirtualBox. Hay đúng hơn là xung đột giữa VirtualBox và tùy chọn "sendfile" của máy chủ.
Liên kết này VirtualBox Ghét Sendfile đã cho tôi giải pháp: chuyển cờ sendfile trong cấu hình máy chủ sang tắt :
sendfile off;
Hy vọng điều này cũng có thể giúp người khác sử dụng VirtualBox để phát triển. :)
Có một số thông tin bổ sung trên diễn đàn VirtualBox .