Nginx için zaman aşımı nasıl devre dışı bırakılır?


46

Yerel bir geliştirme makinesinde, bunun gibi bir nginx ters vekil sunucuya sahibim :

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;
}

Eğer başvurumda hata ayıklarsam, sınırsız bir süre için gecikme olabilir, ancak 30 saniye sonra alıyorum:

504 Gateway Time-out

bir cevap olarak.

Zaman aşımını nasıl devre dışı bırakabilirim ve ters proxy'imin bir yanıt için sonsuza dek beklemesini nasıl sağlayabilirim? Ve ayarın küresel olmasını seviyorum, böylece her proxy için ayarlamama gerek kalmıyor.


1
Bir arkaplan işi başlatmayı ve kullanıcının daha sonra durumunu kontrol etmesini sağlayın.
Michael Hampton

Yanıtlar:


60

Hiç devre dışı bırakmak mümkün olmayabilir, ancak uygulanabilir bir geçici çözüm yürütme süresini artırmaktır. Bir nginx eğitim sitesinde , şöyle yazılmıştır:

Sunucunuzdaki tüm siteler için zaman sınırını artırmak istiyorsanız, ana nginx.confdosyayı düzenleyebilirsiniz :

vim /etc/nginx/nginx.conf

Http {..} bölümünde aşağıdakileri ekleyin

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

ve nginx 'config'i yeniden yükleyin:

sudo service nginx reload

Ben gerçekleşmesi mümkün değildir oldukça büyük bir değer kullandık, yani 999999kullanılarak veya zaman birimlerini yoluyla bir gün, 1d.

Değerin ayarlanmasının 0hemen bir ağ geçidi zaman aşımı hatasına neden olacağına dikkat edin .


3
Sevgili rastgele downvoter, bu uygulamada neyin kötü olduğuna dair bir yorum güzel olurdu.
k0pernikus

7
@kb. OP olduğum için komik ve cevap olarak en uygulanabilir geçici çözümü yayınladım, gerçek bir çözüm beklerken ^^
k0pernikus 17:16

2
Haha, senin OP olduğunu tamamen özledim. Fakat cevabınız doğru, cevabı daha da netleştirebilirsiniz (benim gibi gelecek çalışanlar için), onu etkisiz hale getirmenin bir yolu olmadığı. =)
kb.

5
Çalışmama konusunda bilgi için teşekkürler 0! O Not okunabilir ekler içeren zaman birimlerini belirtebilir Eğer böyle bir değeri kullanmak böylece, 1d.
Gerçek Ad 30:30 '

3
Hem onu ​​hem proxy_connect_timeout 600;de nginx.conf dosyasına ekledim, ancak zaman aşımı hala 60 saniyedir. Denemem gereken başka bir şey var mı?
andreszs,

9

AWS ve Yük Dengeleyici kullanıyorsanız, Bekleme zaman aşımını düzenlemelisiniz. Bence varsayılan 60 saniye


Bunun niçin aşağı oy kullandığını anlıyorum ama belki de cevap onun kullanım durumunu açıklamak için güncellendiyse daha faydalı olurdu. Bu OP'ye cevap vermese de, bir bağlantıyı ne kadar süre açık tutacakları konusunda bir sınır olduğu için ELB kullanıp kullanmadığınızı dikkate almak yararlı olacaktır.
doz87

@ doz87 evet, sadece dikkate alınması gereken bir şey
szeljic

Bu gerçekten özellikle AWS altında Magento ile çalışan benim davamda kontrol etmeye değer. İyi nokta @szeljic
vnpnlz

Teşekkürler kardeşim, EC2
örneğime

Bu, tüm yükseltmeleri hak ediyor - herhangi bir AWS kullanıcısı, NGINX ayarlarına bakılmaksızın, 60 saniye ile sınırlı kalacak
Aphire

4

Nginx 502 zaman aşımı hatasıyla mücadele ediyorum ve bu sorunu çözemedim. Ancak, zaman aşımı hatasına neden olan gunicorn oldu. Bu yüzden fastcgi ayarlarınızı da kontrol etmeniz gerekebilir.

Gunicorn için bu:

gunicorn wsgi:application --timeout 300
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.