Saya menjalankan Puma sebagai server aplikasi upstream dan Riak sebagai cluster db latar belakang saya. Ketika saya mengirim permintaan bahwa peta-mengurangi sebagian data untuk sekitar 25K pengguna dan mengembalikannya dari Riak ke aplikasi, saya mendapatkan kesalahan di log Nginx:
upstream timed out (110: Connection timed out) saat membaca header respons dari upstream
Jika saya menanyakan upstream saya secara langsung tanpa proxy nginx, dengan permintaan yang sama, saya mendapatkan data yang diperlukan.
Batas waktu Nginx terjadi setelah proxy dimasukkan.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
Nginx memiliki banyak arahan batas waktu. Saya tidak tahu apakah saya melewatkan sesuatu yang penting. Bantuan apa pun akan sangat dihargai ....
Jawaban:
Ini terjadi karena upstream Anda membutuhkan terlalu banyak waktu untuk menjawab permintaan dan NGINX menganggap upstream telah gagal memproses permintaan, sehingga ia merespons dengan kesalahan. Cukup sertakan dan tingkatkan proxy_read_timeout di
location
blok konfigurasi. Hal yang sama terjadi pada saya dan saya menggunakan waktu tunggu 1 jam untuk aplikasi internal di tempat kerja:Dengan ini, NGINX akan menunggu selama satu jam (3600s) untuk upstreamnya mengembalikan sesuatu.
sumber
proxy_read_timeout
bagian http mungkin tidak membantu. Saya memilikiproxy_pass
arahan di bagian lokasi dan hanya di sanaproxy_read_timeout
pengaturannya membuat perbedaan. (nginx 1.16.0)Anda harus selalu menahan diri untuk tidak menambah waktu tunggu, saya ragu waktu respons server backend Anda adalah masalah di sini.
Saya mengatasi masalah ini dengan menghapus tanda koneksi tetap hidup dan menentukan versi http sesuai jawabannya di sini: https://stackoverflow.com/a/36589120/479632
Sayangnya saya tidak dapat menjelaskan mengapa ini berhasil dan tidak berhasil menguraikannya dari dokumen yang disebutkan dalam jawaban yang ditautkan, jadi jika ada yang memiliki penjelasan, saya akan sangat tertarik untuk mendengarnya.
sumber
proxy_read_timeout
jika Anda tahu bahwa proxy (bahkan jika untuk URL tertentu) membutuhkan lebih banyak waktu pemrosesan?$http_host
hak? Saya menduga itu tidak akan terbang untuk https. Mungkin pengaturan tambahan juga diperlukan untuk proxy permintaan https.Pertama cari tahu hulu mana yang melambat dengan berkonsultasi dengan file log kesalahan nginx dan menyesuaikan waktu baca yang sesuai dalam kasus saya itu fastCGI
Jadi saya harus menyesuaikan fastcgi_read_timeout di konfigurasi server saya
Lihat: postingan asli
sumber
Dalam kasus Anda, ini membantu sedikit pengoptimalan dalam proxy, atau Anda dapat menggunakan "# pengaturan waktu habis"
sumber
proxy_pass
di bagian lokasi .Saya pikir kesalahan ini dapat terjadi karena berbagai alasan, tetapi ini bisa khusus untuk modul yang Anda gunakan. Misalnya saya melihat ini menggunakan modul uwsgi, jadi harus menyetel "uwsgi_read_timeout".
sumber
Saya akan merekomendasikan untuk melihat
error_logs
, khususnya di bagian hulu di mana ia menunjukkan hulu spesifik yang waktu habis.Kemudian berdasarkan itu Anda dapat menyesuaikan
proxy_read_timeout
,fastcgi_read_timeout
atauuwsgi_read_timeout
.Juga pastikan konfigurasi Anda dimuat.
Detail lebih lanjut di sini Nginx upstream habis (mengapa dan bagaimana memperbaikinya)
sumber
Seperti yang telah ditunjukkan banyak orang di sini, meningkatkan pengaturan waktu tunggu untuk NGINX dapat menyelesaikan masalah Anda.
Namun, meningkatkan pengaturan waktu tunggu Anda mungkin tidak semudah yang disarankan oleh banyak dari jawaban ini. Saya sendiri menghadapi masalah ini dan mencoba mengubah pengaturan batas waktu saya di file /etc/nginx/nginx.conf , seperti yang disarankan oleh hampir semua orang di utas ini. Ini tidak membantu saya sedikit pun; tidak ada perubahan yang jelas dalam pengaturan batas waktu NGINX. Sekarang, beberapa jam kemudian, saya akhirnya berhasil memperbaiki masalah ini.
Solusinya terletak pada utas forum ini , dan yang dikatakannya adalah Anda harus meletakkan pengaturan batas waktu di /etc/nginx/conf.d/timeout.conf (dan jika file ini tidak ada, Anda harus membuatnya). Saya menggunakan pengaturan yang sama seperti yang disarankan di utas:
sumber
Saya memiliki masalah yang sama dan menghasilkan kesalahan "setiap hari" di pengontrol rel. Saya tidak tahu mengapa, tetapi dalam produksi, puma menjalankan kesalahan berulang kali menyebabkan pesan:
upstream timed out (110: Connection timed out) saat membaca header respons dari upstream
Mungkin karena Nginx mencoba mendapatkan data dari puma berulang kali. Lucunya, error tersebut menyebabkan pesan batas waktu meskipun saya memanggil tindakan yang berbeda di pengontrol, jadi, satu kesalahan ketik memblokir semua aplikasi.
Periksa file log / puma.stderr.log Anda untuk melihat apakah situasinya.
sumber
Dari sisi kami menggunakan spdy dengan cache proxy. Ketika cache kedaluwarsa kami mendapatkan kesalahan ini sampai cache telah diperbarui.
sumber
Semoga ini membantu seseorang: Saya mengalami kesalahan ini dan penyebabnya adalah izin yang salah pada folder log untuk phpfpm, setelah mengubahnya sehingga phpfpm dapat menulis ke sana, semuanya baik-baik saja.
sumber
Untuk
proxy_upstream
waktu tunggu, saya mencoba pengaturan di atas tetapi ini tidak berhasil.Pengaturan
resolver_timeout
berfungsi untuk saya, karena saya tahu bahwa perlu waktu 30 detik untuk menghasilkan pesan batas waktu upstream. Misalnya me.atwibble.com tidak dapat diselesaikan (110: Operasi habis waktunya) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
sumber