pengembangan-web-mp.com

Pengaturan tajuk kedaluwarsa untuk konten statis yang disajikan dari nginx

Saya menggunakan nginx untuk server konten statis saya, apakah ada cara saya dapat mengatur header kedaluwarsa untuk setiap file yang memenuhi aturan tertentu? Sebagai contoh, dapatkah saya mengatur tajuk kedaluwarsa untuk semua file yang memiliki ekstensi '.css'?

101
Unkwntech

Saya lebih suka melakukan header cache yang lebih lengkap, selain beberapa ekstensi file lagi. '?' awalan adalah tanda 'tidak menangkap', nginx tidak akan menghasilkan $ 1. Ini membantu mengurangi beban yang tidak perlu.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}
135
J. M. Becker
server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

The location direktif

The expires direktif

22
Dave Cheney

Saya tidak memiliki reputasi yang cukup untuk mengomentari mengapa jawaban yang diterima akan menyebabkan file tidak lagi muncul, tetapi saya menemukan jawabannya dan ingin membantu!

Versi pendek:

Pastikan Anda memiliki direktori root yang ditentukan untuk blok lokasi Anda pada gambar jika Anda tidak memiliki satu set global!

Versi panjang di bawah ini:


Pertama-tama, metode saya menerapkan solusi ini sangat mirip dengan jawaban ini , di mana Anda menulis aturan (seperti pada jawaban yang diterima):

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

ke dalam file img-cache.conf

dan kemudian sertakan file itu ke dalam direktif server {...} Anda.

Contoh saya tentang somesite.com di folder yang tersedia di situs saya:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

Dengan begitu Anda bisa menambahkan blok lokasi caching gambar ke beberapa situs yang mungkin Anda jalankan.


Kedua, saya memiliki situasi di mana/var/www/saya berisi dua folder yang saya izinkan sebagai public_html - aman dan pelatihan, jadi saya harus membuat blok lokasi spesifik dalam arahan server situs saya yang memilih folder-folder ini.

Dengan demikian, Saya tidak memiliki set direktori root global .

Jadi ketika Anda membuat blok lokasi gambar Anda, Anda mungkin tidak akan memberikan mereka direktori root untuk mencari gambar di dalamnya!

Solusi saya adalah untuk:

location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/secure;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}
19
amurrell

Anda juga dapat mengatur kadaluarsa ke maksimum. Berikut adalah arahan yang saya gunakan untuk css dan js.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}
9
Jauder Ho

Semua solusi yang disebutkan di atas akan menyangkal kemungkinan untuk memiliki alias yang berbeda untuk jalur yang berbeda. Demi memiliki semua kedaluwarsa cache yang berbeda di satu tempat, Anda harus menggunakan peta nginx dengan cara berikut.

...

# Expires mappings
map $sent_http_content_type $expires {
    default                    off;
    text/html                  Epoch;
    text/css                   max;
    application/javascript     7d;
    ~image/                    max;
}

...

server {
   listen ...;

   expires $expires;
   location /assets/ {
      # It is now possible to serve some resources from different path
      alias /var/www/my_other_path/
   }

   # and have them all have same expirations
   location / {
       try_files $uri $uri/ /index.html;
   }
...
}

Off menonaktifkan caching, Epoch (untuk unix Epoch) menghasilkan sumber daya yang selalu diambil ulang, max mengatur tanggal ke nilai maksimal browser.

~ Gambar/cocok dengan semua jenis gambar.

Lebih lanjut tentang peta nginx di http://nginx.org/en/docs/http/ngx_http_map_module.html .

4
Pantura

Jika Anda memiliki satu tempat yang merupakan rumah bagi semua file statis Anda, sesuatu seperti ini ...

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

Jawaban yang diterima menyebabkan nginx tidak menemukan file statis saya. Tidak begitu yakin mengapa, tetapi ini adalah alternatif sederhana.

2
user161646