Bagaimana cara membuat HAProxy menulis ulang ke back-end yang berbeda ketika file pertama hilang? Yang saya butuhkan hanyalah errorloc
membuat penulisan ulang alih-alih redirect, sehingga klien tidak mengetahui redirect.
Kami telah mengembangkan aplikasi dengan mempertimbangkan NginX, yang merupakan proksi penyeimbang beban mundur dan server web untuk file statis. Aplikasi didasarkan pada kerangka Opa yang membutuhkan sesi sticky berdasarkan cookie - didukung oleh NginX dan HAproxy. Fitur aplikasi yang menjadi masalah adalah pembuatan konten dinamis. Ini menghasilkan gambar sesuai permintaan, tetapi setelah generasi disimpan dalam disk dan dapat diakses secara statis dengan jalur deterministik.
Masalah mudah diselesaikan dengan NginX - ia mencoba membaca file lokal dan menggunakan load back-end yang seimbang hanya jika file tersebut hilang (belum dibuat):
server {
server_name wkaliszu.pl;
location /thumb {
root /path_on_disk/to_cached_content;
expires 7d;
# try to access already generated content
try_files $uri @wkaliszu;
}
location / {
# reverse proxy to the application
[...]
}
location @wkaliszu {
# reverse proxy to the application
[...]
}
}
Server dimigrasikan dan sekarang menggunakan HAPproxy untuk load balancing, yang bukan server web dan tidak mendukung fitur ini. Sekarang pembuatan perangkat lunak dinamis dilakukan setiap kali klien mencoba mengakses sumber daya, yang jauh lebih lambat dan membuang-buang sumber daya. Akan lebih baik jika dapat menggunakan back-end berikutnya jika yang pertama (server web caching sederhana untuk file statis) gagal dengan kesalahan 404, tetapi saya tidak dapat menemukan cara untuk melakukannya dengan cara sederhana. Mengarahkan kembali /thumb
ke NginX, yang mencoba membaca file statis dan kembali menulis ulang ke HAproxy dengan header HTTP baru hanya muncul di benak saya, tetapi saya ingin menemukan sesuatu yang lebih baik.