Saya baru-baru ini mengalami masalah setelah beralih ke Cloudflare, dan solusinya adalah menghentikan Cloudflare dari caching 404 tanggapan.
Dalam pengaturan multi-server kami yang seimbang, kadang-kadang 404 terjadi, tetapi cepat diperbaiki oleh rsync (via lsyncd). Sebelum Cloudflare, permintaan ulang ke file 404 akan dengan cepat menjadi 200 karena rsync melakukan tugasnya.
Namun, karena Cloudflare melakukan cache semua data berdasarkan header caching, dan baik apache maupun nginx mengirim header no-cache untuk 404s, Cloudflare akhirnya melakukan caching respons 404 untuk sementara waktu.
Saya telah mencari solusi untuk menambahkan tajuk sebanyak 404 secara global di apache dan nginx (secara global, untuk semua domain yang diinangi), tetapi sejauh ini belum muncul.
Adakah yang bisa membantu?
Terima kasih.
sumber
Jawaban:
Tidak bisakah Anda bertahan dengan menggunakan direktif error_page, dan kemudian menangani lokasi secara terpisah dengan header yang ditambahkan?
misalnya dalam Nginx:
sumber
listen
karenalocation
tidak didukung di dalamnyahttp
secara langsung. 2. Yang lebih penting, cuplikan Anda sebenarnya tidak berfungsi karena add_header hanya berlaku untuk 20X dan 30X ( nginx.org/en/docs/http/ngx_http_headers_module.html ). Namun, kami beruntung, karena pada versi 1.7.5 yang baru dirilis, Anda sekarang dapat menambahkanalways
modifer yang akan menerapkannya ke semua kode respons. Saya harus memutakhirkan nginx tetapi itu adalah tendangan yang bagus di pantat. Berhasil.root
berfungsi. Jika itu dihapus, cukup banyak apa yang akhirnya saya lakukan untuk nginx.server
, mereka bisa terangkat.Anda dapat melakukannya dengan cara ini juga:
sumber
404 "no-cache"
tetapi pembatasan minimum edit 6 karakter stackexchange yang bodoh mencegah saya untuk memperbaikinya. Jelas bukan batasan yang baik untuk situs yang membahas tentang pengodean dan konfigurasi ...Di apache 2.4, Anda dapat mencoba sesuatu seperti:
Yang
always
penting karena ini adalah:Anda mengatakan semua 404, tetapi untuk referensi lengkap tentu saja mungkin masuk akal untuk membungkusnya dalam
<FilesMatch>
atau<LocationMatch>
untuk membatasi ruang lingkup.Saya percaya ini adalah kemampuan baru di apache 2.4 karena menggunakan
expr
conditional bukan dalam versi 2.2 dari dokumentasi mod_headers.curl -I [foo]
uji tanpa konfigurasi ini:curl -I [foo]
uji dengan konfigurasi ini:Sumber:
http://httpd.apache.org/docs/current/mod/mod_headers.html
sumber
lima sen saya tentang masalah ini -
dalam proyek PHP kami, kami memiliki beberapa 404 halaman, jadi saya memutuskan untuk melakukannya pada level PHP menggunakan fungsi header PHP ()
sumber