Pertanyaan Pengaturan kedaluwarsa header untuk konten statis yang disajikan dari nginx


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


85
2018-06-10 07:19






Jawaban:


Saya lebih suka melakukan header cache yang lebih lengkap, selain beberapa ekstensi file lainnya. '?' prefix adalah tanda 'non-capturing', 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";
}

112
2017-11-25 21:07



Semua file statis saya tidak ditemukan setelah menambahkan itu. - Jürgen Paul
@JackSpairow: Saya tidak bisa menjelaskan mengapa itu terjadi, karena selalu berhasil untuk saya. Apakah Anda menjalankan Nginx tanpa modul add_header? Hal semacam ini benar-benar terbatas dalam ruang lingkup, Anda yakin deselerasi lain bukanlah masalah dalam kombinasi? - J. M. Becker
Mungkin blok lain memiliki definisi untuk file statis dengan root set, dalam hal ini Anda harus menambahkan arahan ke blok itu. (Saya tahu ini terlambat 2y, tapi untuk warga masa depan) - aularon
Saya pribadi menghargai klarifikasi, terutama bagi para pencari masa depan karena mereka sering muncul lama setelah posting asli. +1: P - J. M. Becker
menggunakan ini benar-benar mengacaukan situs wordpress saya. css dan gambar tidak ditampilkan. apakah ada konflik lain di suatu tempat? - user1641443


server {
    ...

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

Itu location direktif

Itu expires direktif


21
2018-06-10 07:23





Saya tidak memiliki reputasi yang cukup untuk berkomentar mengapa jawaban yang diterima akan menyebabkan file tidak muncul lagi, 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 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";
}

menjadi sebuah file img-cache.conf

lalu sertakan file itu ke Anda server {...} direktif.

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

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

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


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

Dengan demikian, Saya tidak memiliki satu set direktori root global.

Jadi ketika Anda membuat blok lokasi gambar Anda, Anda mungkin tidak menyediakan direktori root dari mana untuk mencari gambar!

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;
}

12
2018-01-31 21:43



+1 untuk membuat ini dapat digunakan kembali .conf. Folder yang sesuai di nginx/1.14.0 (Ubuntu) tampaknya /etc/nginx/snippets/. - Jan Werkhoven


Anda juga dapat mengatur kadaluarsa hingga maksimum. Di sini adalah petunjuk 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
2018-06-10 08:41



Saya akan menggunakan arahan root hanya di blok {} server, ketika menggunakannya di sub lokasi itu mengarah ke konsekuensi yang tidak terduga. Anda tidak perlu istirahat; karena Anda tidak dalam blok if {} - Dave Cheney
Kamu benar. Lupa untuk membersihkan ini. Diedit untuk mencerminkan ini. - Jauder Ho


Semua solusi yang disebutkan di atas akan menolak kemungkinan untuk memiliki alias yang berbeda untuk jalur yang berbeda. Juga demi memiliki semua cache expired Anda 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 nonaktifkan caching, epoch (untuk unix epoch) menghasilkan sumber daya yang selalu diambil, max menetapkan tanggal ke nilai maks browser.

The ~ image / cocok dengan semua jenis gambar.

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


2
2018-01-04 19:58



Perhatikan bahwa jika $sent_http_content_type aku s "text/css;charset=UTF-8" ekspresi di atas akan gagal. - pachanka


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

 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 yang sederhana.


0
2018-02-25 03:12





Karena ini adalah thread yang sangat tua, dan saya menemukan tutorial yang sangat canggih.

Mungkin Anda ingin memeriksanya

Cara Menerapkan Browser Caching dengan Modul header Nginx di Ubuntu 16.04


-1
2018-05-04 04:18



Umumnya, kami tidak menyukai tautan ke artikel dan tidak termasuk konten di sini juga, karena tautan memiliki kecenderungan untuk berubah atau kedaluwarsa. - Unkwntech