Bagaimana cara mencegah lighttpd dari caching file statis, bahkan ketika dimodifikasi pada disk?

10

Saya menggunakan lighttpd untuk melayani file statis. Saya memiliki banyak gambar dalam direktori yang saya perbarui secara berkala. Ini akan mengubah konten file (dan filesize) serta tanggal modifikasi, tetapi bukan nama file mereka.

Ketika saya mengakses file melalui http, pembaruan tidak diperhitungkan dan ringan melayani file lama. Saya dapat secara manual mengubah nama file menjadi sesuatu yang berbeda, maka lighttpd akan mengembalikan kesalahan 404, dan jika saya mengganti nama file saya kembali, saya akan mendapatkan versi terbaru yang benar. Sepertinya lightty menggunakan semacam mekanisme cache sendiri (yang baik-baik saja) untuk mengembalikan file statis. Sayangnya, tampaknya mekanisme ini tidak memperbarui sendiri ketika file diubah.

Saya memeriksa melalui Wireshark, dan browser saya benar-benar melakukan permintaan ke file, ini bukan masalah caching browser. Ini mengembalikan 200 OK ketika memintanya dari cache kosong, dan 304 Tidak Diubah sebaliknya, seperti yang diharapkan. Tetapi file dikembalikan dengan header Modifikasi Terakhir yang salah yang tidak mencerminkan tanggal modifikasi terakhir yang sebenarnya.

Mungkin ada beberapa petunjuk konfigurasi yang tidak saya sadari?

Saya ingin file yang dikembalikan oleh lighty mencerminkan perubahan yang dibuat pada disk secara langsung, atau setidaknya bisa membatalkan cache-nya.

Pembaruan untuk siapa pun yang mengikuti pertanyaan ini: Saya menemukan pelakunya. Jika saya memperbarui file statis, Lighty tidak mengembalikan konten baru, tetapi mengembalikan panjang konten baru di header, menghasilkan sampah yang ditampilkan. Jika saya kompres file menggunakan mod_compress, masalah hilang karena mod_compress menggunakan sistem caching sendiri. Sayangnya, saya tidak dapat memampatkan semua file (misalnya file gambar). Jadi itu hanya perbaikan parsial, tapi saya akan kembali lagi nanti dan dengan senang hati akan menemukan solusi.

Pixelastic
sumber

Jawaban:

6

Saya akhirnya menemukan masalahnya. Dan itu berasal dari VirtualBox.

Saat mengedit file di Host (Menang), lighttpd di guest (Linux) tidak memperbarui konten file dengan benar (tetapi memperbarui ukuran file dengan benar), sehingga mengembalikan konten yang terpotong atau kacau.

Melepas drive yang saya bagikan dan memasangnya kembali, atau mengedit file langsung di tamu, menyelesaikan masalah.

Butuh waktu 6 bulan untuk akhirnya menemukan jawabannya.

Pixelastic
sumber
3

Anda tidak menyebutkan apakah Anda memiliki mod_cache yang diinstal atau tidak? Modul ini default ke 'diaktifkan' ketika diinstal.

Saya enggan menyarankannya, tetapi apakah menghidupkan Etag membantu?

agy
sumber
mod_cache tidak diinstal. ETag diaktifkan (tetapi inode tidak digunakan untuk menghasilkan ETag). Saya mencoba mengaktifkan inode, atau menonaktifkan ETag, tetapi tidak berhasil.
Pixelastic
2

Coba atur caching engine stat ke 'nonaktif':

server.stat-cache-engine = "disable'
Aleksey Korzun
sumber
Terima kasih, tetapi ini tidak berpengaruh. Namun, saya tidak tahu arahan itu, dan mungkin berguna nanti.
Pixelastic
Mungkin ada proxy perantara antara Anda dan server? Coba mulai ulang server Anda dan akses file yang sama. Apakah Anda menggunakan mod_compress?
Aleksey Korzun
Saya menjalankan VM Ubuntu di host Windows 7. Lighty ada di VM. Saya tidak berpikir mungkin ada masalah proxy di sini. Saya telah me-restart server, tetapi ini tidak menghapus cache yang ringan. Saya menggunakan mod_compress tetapi tidak pada file-file itu. Saya akan mencoba me-restart seluruh VM dan menonaktifkan mod_compress untuk melihat apakah ada perubahan. Terima kasih atas idenya.
Pixelastic
Hmm, saya mungkin punya sesuatu di sini. Jika saya mengubah file ke yang lebih kecil (tapi tetap menggunakan nama yang sama), saya hanya mendapat bagian atas file saya. Sepertinya file lama ditampilkan dengan panjang konten saat ini. Jika saya ganti dengan file yang lebih besar, seluruh file (lama) ditampilkan. Sepertinya perubahan ukuran file diperhitungkan tetapi bukan konten file.
Pixelastic
Maaf atas spamming komentar: menonaktifkan mod_compress tidak mengubah apa pun, juga tidak me-restart seluruh VM.
Pixelastic
2

Opsi lighttpd ini bekerja untuk saya

server.network-backend = "writev" 
danelips
sumber
Bekerja seperti pesona bagi saya, pada VM Debian di desktop Debian, terima kasih!
Yvan