NGINX'i yeni statik dosyalar yüklemeye nasıl zorlarım?


22

Geçenlerde bir siteye büyük bir güncelleme yaptım ve tarayıcılarının eski javascript dosyaları yüklediği için bazı kişilerin giriş yapamadığı bir sorunum var . Yaptığım şeylerden bazıları:

  • Tüm javascript dosyalarını bozan önbellek
  • sendfile offNginx.conf'ta ayarlayın
  • expires 1sMySite.conf içinde ayarla
  • Açıkça Cache-Control başlığını ayarlayın: add_header Cache-Control no-cache;

Körük nginx için benim conf dosyaları. Herhangi bir yardım çok takdir edilecektir.

/etc/nginx/sites-enabled/mysite.conf

proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;

server {
    listen 80;
    server_name mysite.com;
    return 301 https://www.mysite.com$request_uri;
}

server {

        # listen for connections on all hostname/IP and at TCP port 80
        listen *:80;

        # name-based virtual hosting
        server_name www.mysite.com;

        # location of the web root for all static files (this should be changed for local development)
        root /var/mysite.com/static;

        # redirect http requests to https
        if ($http_x_forwarded_proto = "http") {
            rewrite  ^/(.*)$  https://www.mysite.com/$1 permanent;
        }

        # error pages
        error_page 403 /errors/403.html;
        error_page 404 /errors/404.html;
        error_page 408 /errors/408.html;
        error_page 500 502 503 504 /errors/500.html;  

        # error and access out
        error_log /var/log/nginx/error.mysite.log;
        access_log /var/log/nginx/access.mysite.log;

        # use Nginx's gzip static module
        gzip_static on;
        gzip_types application/x-javascript text/css;

        location / {

            # redefine and add some request header lines which will be passed along to the node server
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header X-Forwarded-Proto $scheme;

            # set the address of the node proxied server
            proxy_pass http://127.0.0.1:9001;

            # forbid all proxy_redirect directives at this level
            proxy_redirect off;
        }

        # do a regular expression match for any files ending in the list of extensions

        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|xml|html|htm)$ {

            # clear all access_log directives for the current level
            access_log off;
            add_header Cache-Control no-cache;
            # set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years
            expires 1s;
        }

}

/etc/nginx/nginx.conf

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile off;
    tcp_nopush off;
    tcp_nodelay off;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Yanıtlar:


18

Önbelleğinizdeki her şeyi el ile silmeyi denediniz mi? Bu genellikle /var/cache/nginx.

add_header Cache-Control no-cache;Küme sahip olmanın işleri saklamaktan alıkoyması gerektiğine inanıyorum , ama belki de bunu ayarlamadan önce oraya önbellekte saklanmış bir şeyin var?


2
Bu iyi bir düşünce. Önbelleğe alınmış dosyaları silmeyi denedim ama /var/cache/nginxtamamen boş
jwerre

14

expires -1;Bir konum bloğunun içine ayarlamak aslında önbelleğe almayı tamamen devre dışı bırakır.


7

Okuyucular tarayıcınızın önbelleğini yok sayıyorsunuz. Nesnelerin adını değiştirmezseniz (örn. .Js'ye sürüm numarası ekleyin) veya nesneler ETag veya Değişiklik Tarihi ile birlikte gönderilmediyse, tarayıcı nesnenin sürümünün hala birkaç için geçerli olduğunu düşünebilir. decennia ve sunucunuza asla danışın.


Bu doğru cevap, kullanıcı zaten önbelleğe alınmış bir sürüme sahip ve eğer 304’nüz yoksa - değiştirilmiş olup olmadığını kontrol etmek için tüm kullanıcılarınızı site verilerinizi yenilemeye zorlamak veya tüm statik içeriğinizi yeniden adlandırmak zorunda kalacaksınız statik içeriğinizi farklı bir klasöre
Brunis

0

Müşterilerinizin önbelleklenmiş bir sürümleri vardır ve sunucunuzda değiştirilip değiştirilmediklerini kontrol etmezler. Bu nedenle, önbellek ayarlarınızı düzeltmeniz gerekir, ardından bunları farklı bir klasöre taşıyabilirsiniz. Örneğin. Eğer /styles/*.css dosyasını / css / yerine taşırsanız ve tüm js dosyalarının komut dosyalarından / js / tarayıcılarına kaynaklarını yeniden taraması gerekir.


0

Aynı sorunla karşı karşıya kaldı. DDOS koruması için cloudflare kullanıyorsanız (lütfen değilse lütfen yapın)

  • bir süre için geliştirici modu.
  • Statik dosya sonuçlarınızı her zaman gizli (google chrome'da buna denir) penceresinde kontrol edin.
  • durdur nginx> önbelleği sil> nginx hizmetini başlat.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.