Saya memiliki aplikasi web yang agak besar dan lambat (data kompleks, antarmuka rumit) dibangun RoR
dan dilayani Puma
dengan nginx
sebagai proxy terbalik. Melihat nginx
log kesalahan, saya melihat beberapa entri seperti:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file
/var/lib/nginx/proxy/8/47/0000038478 while reading upstream,
client: 5.144.169.242, server: engagement-console.foo.it,
request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0",
upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2",
host: "ec.reputationmonitor.it",
referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
Saya agak ingin tahu karena sangat tidak mungkin bahwa halaman tetap sama untuk pengguna yang berbeda dan interaksi pengguna yang berbeda, dan saya tidak akan berpikir bahwa buffering respon pada disk diperlukan / berguna.
Saya tahu tentang proxy_max_temp_file_size
dan mengaturnya ke 0, tetapi bagi saya agak canggung (proxy saya mencoba untuk buffer tetapi tidak memiliki file di mana buffer ke ... bagaimana bisa lebih cepat?).
Pertanyaan saya adalah:
Bagaimana saya bisa menghapus [memperingatkan] dan menghindari tanggapan buffering? Apakah lebih baik mematikan
proxy_buffering
atau mengaturproxy_max_temp_file_size
ke 0? Mengapa?Jika
nginx
menyangga respons: Kapan respons melayani buffer, kepada siapa, dan mengapa?Mengapa
nginx
dihidupkanproxy_buffering
secara default dan kemudian [memperingatkan] apakah Anda benar-benar memberikan respons?Kapan respons memicu opsi itu? Kapan dibutuhkan> beberapa detik (berapa banyak?) Untuk melayani tanggapan? Apakah ini dapat dikonfigurasi?
TIA, ngw.
Jawaban:
Anda harus mengatur
proxy_max_temp_file_size
ke 0 untuk menghapusnya. Theproxy_buffering
direktif tidak langsung berkaitan dengan peringatan. Anda dapat mematikannya untuk menghentikan buffering sama sekali tetapi itu tidak dianjurkan secara umum (kecuali jika diperlukan untuk Komet ).Ini server segera, tetapi klien biasanya memiliki koneksi yang lebih lambat dan tidak dapat mengkonsumsi data respons secepat yang dihasilkan oleh aplikasi Anda. Nginx mencoba untuk buffer seluruh respons untuk melepaskan aplikasi Anda ASAP.
Lihat juga: http://aosabook.org/en/nginx.html
Seperti yang sudah saya sebutkan,
proxy_buffering
tidak secara langsung terkait dengan peringatan. Ini umumnya diperlukan untuk operasi proxy yang dioptimalkan dan mematikannya menurunkan kinerja dan throughput.Nginx hanya memperingatkan Anda ketika respons tidak sesuai dengan buffer memori yang dikonfigurasi. Anda dapat mengabaikan peringatan itu jika tidak masalah untuk Anda.
Ini memicu ketika buffer memori penuh. Tolong, lihat dokumen, seluruh mekanisme dijelaskan: http://nginx.org/r/proxy_max_temp_file_size
Anda mungkin ingin menambah buffer memori.
sumber
proxy_max_temp_file_size
untuk0
atau ini hanya sebuah cara untuk menghapus peringatan itu?Konfigurasi berikut berfungsi dengan baik di server saya.
sumber
16k
di baris pertama melakukan persis sama dengan baris kedua?Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header
. Proxy_buffers adalah untuk sisa tanggapan.