2016-03-21 11 views
1

Bir öğretici takip ettim ve bir Vagrant VM üzerinde çalışan bir nginx sunucusuna sahip oldum (Şef olarak bir sağlayıcı olarak). Sadece tek bir html sayfam var, index.html, ve üzerinde değişiklik yaparsam ve vagrant provision'u çalıştırırsam, tarayıcımda sayfaya gittiğimde değişiklikler yansıtılır. Bununla birlikte, nginx'in sunduğu bir css ve js dosyası da var ve eğer değişiklikler yaparsam sanal makineyi yeniden yükledikten sonra bile değişiklikler sayfaya yansıtılmaz. Bu, VM'ye SSH uygulayabildiğim gerçeğine ve dosyaların daha yeni sürümlerinin gerçekten VM'de olduğunu doğrulamasına rağmen. Değişiklikleri yaparken, VM'nin eski dosyalara nasıl erişebildiğini bile anlayamıyorum. Belki nginx yapılandırma dosyasında bir sorun var mı? İşte olmasıdır:Nginx sunucusunda gösterilmiyor CSS ve .js dosyaları güncelleştirmeleri

server { 
    listen 80 default_server; 
    listen [::]:80 default_server ipv6only=on; 

    root /home/vagrant/project/webroot; 
    index index.html index.htm; 

    # Make site accessible from http://localhost/ 
    server_name localhost; 

    location/{ 
     # First attempt to serve request as file, then 
     # as directory, then fall back to displaying a 404. 
     try_files $uri $uri/ =404; 
     # Uncomment to enable naxsi on this location 
     # include /etc/nginx/naxsi.rules 
    } 

Ben VY'de webroot depolanan tüm 3 dosyaları (js, css ve html) dosyası var. Dediğim gibi, SSH'yi bulabilirim ve hepsinin olması gereken yerde olduklarını doğrulayabilirim, bu yüzden bir yapılandırma sorunu olması gerektiğini düşünüyorum. CSS ve js dosyaları için özel bir şey yapmam gerekiyor mu?

cevap

6

1) Önbellek denetimi üstbilgilerini Nginx yapılandırmasına ekleyebilirsiniz.

location ~* ^.+\.(js|css)$ { 
    #old style: add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; 
    #old style: add_header Pragma "no-cache"; 
    expires -1; 
    sendfile off; #if you're using virtualbox (it is not about cache, but you will need it) https://www.vagrantup.com/docs/synced-folders/virtualbox.html 
} 
+0

Bu başardı! Çok teşekkürler, kafamı duvara çarpıyordu gerçekten. – Adam

+0

Yukarıdaki, statik dosyaların hiçbir zaman önbelleğe alınmayacağı anlamına gelir. Her tarayıcı çağrısı, statik dosya gönderilecektir. @Kilizo tarafından belirtildiği gibi bu sorun tarayıcı tarafında önbelleğe alma ile olmalıdır. Yukarıdaki düzeltme sorununuzu çözmüş olabilir, ancak nginx sunucunuzun her tarayıcıya istediği zaman dosyayı göndermesini sağlayabilir (önbellek yok). Daha fazla detay burada. https://css-tricks.com/strategies-for-cache-busting-css/ ve http://stackoverflow.com/questions/30921598/what-does-expires-1-mean-in-nginx-location-directive – bgth

1

Tarayıcınızın eski CSS ve JS dosyalarını önbelleğe almadığından emin misiniz?

+0

Bunu nasıl kontrol edebilirim? Sadece önbelleği temizleyerek sanırım? Bu bir fark yaratırsa Chrome kullanıyorum. – Adam

+1

Siteyi gizli olarak yüklemeyi veya önbelleği önce temizlemeyi deneyin. Önbelleğe alınmış CSS dosyalarının dev araçlarını kullanarak ne zaman dolduğunu kontrol edebilirsiniz. Bu bağlantı, http://www.devcurry.com/2012/03/how-to-determine-resources-coming-from.html – Kilizo

+0

Şanssız olsa da iyi bir fikir olabilir. Teşekkürler – Adam

İlgili konular