Bagaimana cara menonaktifkan batas waktu untuk nginx?

47

Pada mesin pengembangan lokal, saya memiliki proxy reverse nginx seperti:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

Namun jika saya men-debug aplikasi saya, responsnya mungkin tertunda untuk waktu yang tidak terbatas, namun setelah 30 detik saya mendapatkan:

504 Gateway Time-out

sebagai tanggapan.

Bagaimana saya bisa menonaktifkan batas waktu dan meminta proxy reverse saya menunggu selamanya? Dan saya suka pengaturannya menjadi global, sehingga saya tidak perlu mengaturnya untuk setiap proxy.

k0pernikus
sumber
1
Pertimbangkan memulai pekerjaan latar belakang dan membiarkan pengguna memeriksa statusnya nanti.
Michael Hampton

Jawaban:

61

Mungkin tidak mungkin untuk menonaktifkannya sama sekali, namun solusi yang layak adalah meningkatkan waktu eksekusi. Di situs tutorial nginx , ditulis:

Jika Anda ingin menambah batas waktu untuk semua situs di server Anda, Anda dapat mengedit nginx.conffile utama :

vim /etc/nginx/nginx.conf

Tambahkan berikut ini di bagian http {..}

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

dan memuat ulang konfigurasi nginx ':

sudo service nginx reload

Saya telah menggunakan nilai yang agak besar yang tidak mungkin terjadi, yaitu 999999atau menggunakan satuan waktu , hingga satu hari lewat 1d.

Berhati-hatilah bahwa pengaturan nilai 0akan segera menyebabkan kesalahan batas waktu gerbang.

k0pernikus
sumber
3
Dear downvoter acak, komentar tentang apa yang buruk tentang praktik ini akan menyenangkan.
k0pernikus
7
@ kb. Ini lucu karena saya OP dan hanya memposting solusi yang paling bisa diterapkan sebagai jawaban, sambil menunggu solusi nyata ^^
k0pernikus
2
Haha, saya benar-benar merindukan Anda OP. Tetapi jawaban Anda adalah yang benar, Anda bisa membuatnya lebih jelas (untuk googler masa depan seperti saya) bahwa tidak ada cara untuk menonaktifkannya. =)
kb.
5
Terima kasih atas info tentang 0tidak berfungsi! Perhatikan bahwa Anda dapat menentukan satuan waktu dengan sufiks yang dapat dibaca , sehingga Anda dapat menggunakan nilai seperti 1d.
Nama Asli Redacted
3
Saya telah menambahkan keduanya dan proxy_connect_timeout 600;ke file nginx.conf, tetapi batas waktunya masih menyala 60 detik. Ada lagi yang harus saya coba?
andreszs
9

Jika Anda menggunakan AWS, dan Load Balancer, Anda harus mengedit batas waktu idle. Saya pikir default adalah 60 detik

szeljic
sumber
Saya mengerti mengapa ini tidak dipilih tetapi mungkin jika jawabannya diperbarui untuk menjelaskan kasus penggunaannya, itu akan lebih bermanfaat. Meskipun ini tidak berlaku untuk menjawab OP, itu adalah sesuatu yang berguna untuk dipertimbangkan jika Anda menggunakan ELB karena ada batasan berapa lama mereka akan menjaga koneksi tetap terbuka juga.
doz87
@ doz87 ya, itu hanya sesuatu untuk dipertimbangkan
szeljic
Ini benar-benar layak untuk diperiksa terutama pada kasus saya yang bekerja dengan Magento di bawah AWS. Poin bagus @szeljic
vnpnlz
Terima kasih bro, ini bekerja untuk saya karena saya menggunakan penyeimbang beban AWS untuk mendistribusikan ke EC2 saya contoh
Vũ Thành Tâm
Ini pantas mendapatkan semua upvotes - setiap pengguna AWS masih akan dibatasi hingga 60 detik terlepas dari pengaturan NGINX mereka tanpa ini
Aphire
4

Saya telah berjuang dengan kesalahan batas waktu nginx 502 dan tidak bisa menyelesaikan masalah. Namun, itu terjadi karena gunicorn yang menyebabkan kesalahan batas waktu. Jadi, Anda mungkin juga perlu memeriksa pengaturan fastcgi Anda.

Untuk gunicorn:

gunicorn wsgi:application --timeout 300
Kostyantyn
sumber