2016-01-22 10 views
10

Tôi đang phân phát một ứng dụng JavaScript trang qua nginx và khi triển khai phiên bản mới, tôi muốn buộc trình duyệt làm mất hiệu lực bộ nhớ cache JS của họ và yêu cầu/sử dụng phiên bản mới nhất có sẵn. Vì vậy, ví dụ khi tôi thay thế một tệp trên thư mục của máy chủ, có tên my-app-8e8faf9.js, với một tệp có tên my-app-eaea342.js, tôi không muốn các trình duyệt kéo my-app-8e8faf9.js từ bộ nhớ cache của chúng nữa. Nhưng khi không có phiên bản mới có sẵn, sau đó tôi vẫn muốn họ đọc các tài sản từ bộ nhớ cache.Hết hạn bộ nhớ cache của tài sản trong trình duyệt khi thay thế máy chủ tệp bằng dấu vân tay qua nginx

Làm cách nào để đạt được điều này với cấu hình nginx? Đây là cấu hình hiện có của tôi:

server { 
    listen 80; 

    server_name my.server.com; 

    root /u/apps/my_client_production/current; 
    index index.html; 

    # ~2 seconds is often enough for most folks to parse HTML/CSS and 
    # retrieve needed images/icons/frames, connections are cheap in 
    # nginx so increasing this is generally safe... 
    keepalive_timeout 10; 
    client_max_body_size 100M; 

    access_log /u/apps/my_client_production/shared/log/nginx.access.log; 
    error_log /u/apps/my_client_production/shared/log/nginx.error.log info; 

    location/{ 
    try_files $uri $uri/ =404; 

    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 

    } 

    # Error pages 
    error_page 500 502 503 504 /500.html; 
} 

Trả lời

4

Bộ nhớ cache không hợp lệ bằng cách thay đổi url nội dung là thực tế bình thường.

Nhưng để làm việc, bạn cần tệp html của bạn không được lưu trữ vĩnh viễn để trình duyệt sẽ có một số thông tin khi những tên này thay đổi.

Vì vậy, các vị trí riêng biệt cho html và nội dung. Đối sánh có thể khác nhau, tùy thuộc vào cách bạn lưu trữ chúng, ví dụ:

location/{ 
    try_files $uri $uri/ =404; 
    gzip_static on; 
    } 

location ^~ /assets/ { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 
Các vấn đề liên quan