Nginx'te FastCGI ile Ağ Geçidi Zaman Aşımı'nı nasıl önleyebilirim


203

Django, FastCGI ve Nginx kullanıyorum. Birisi ben işleyecek ve daha sonra gönderilen her düğüm için bazı durum kodları döndürmek XML üzerinden bazı veri gönderebilirsiniz tür bir API oluşturuyorum.

Sorun, XML işlemek için çok uzun sürerse Nginx 504 Ağ Geçidi Zaman Aşımı atacak - 60 saniyeden uzun düşünüyorum.

Bu yüzden Nginx'i kurmak istiyorum, böylece konum / api ile eşleşen herhangi bir istek 120 saniye boyunca zaman aşımına uğramayacak. Hangi ayar bunu başaracak.

Şimdiye kadar sahip olduğum şey:

    # Handles all api calls
    location ^~ /api/ {
        proxy_read_timeout 120;
        proxy_connect_timeout 120;
        fastcgi_pass 127.0.0.1:8080;
    }

Düzenleme: Ne var çalışmıyor :)


7
Zaman aşımı değerlerini "120" yerine "2m" olarak ayarlayabilirsiniz.
Cenk Alti

1
Verilerin akıtılamaması kötü görünüyor ... yani bir sunucunun 60 saniye veya daha fazla sürede yanıt vermeye başlaması kabul edilemez görünüyor.
Adam Gent

Yanıtlar:


245

Proxy zaman aşımları iyi, proxy'ler için, FastCGI için değil ...

FastCGI zaman aşımları etkileyen yönergeler vardır client_header_timeout, client_body_timeoutve send_timeout.

Düzenleme : nginx wiki üzerinde bulunanlar göz önüne alındığında, send_timeout yönergesi genel yanıt zaman aşımı (biraz yanıltıcı) ayarlamaktan sorumludur. FastCGI fastcgi_read_timeoutiçin fastcgi işlem yanıtı zaman aşımını etkileyen faktörler vardır .

HTH.


8
Uwsgi kullanan ve bu hatayı alan herkes için uwsgi_read_timeout 600; sorunumu çözdü.
Homer6

2
Buradaki sorum (sunucu yöneticisi amatör olarak) bunu değiştirmek için nereye gideceğim? httpd.conf dosyası?
jeffkee

2
Eğer yardımcı olursa, benimki Media Temple'ın DV sisteminde / etc / nginx / idi.
jeffkee

Abdo hata ayıklamak için güzel bir yol verir. Hâlâ sorun yaşıyorsanız, nginx.conf (client_max_body_size ** M;)
Sam Grondahl

2
Zaman aşımı imho'yu artırmak uygun bir çözüm değildir.
JazzCat

24

Tek boynuzlu at ve raylı nginx kullananlarda, büyük olasılıkla zaman aşımı unicorn.rbdosyanızda

unicorn.rb'de büyük bir zaman aşımı koymak

timeout 500

hala sorun yaşıyorsanız nginx'te yukarı akışınızda fail_timeout = 0 olmasını deneyin ve bunun sorununuzu çözüp çözmediğine bakın. Bu hata ayıklama amaçlıdır ve bir üretim ortamında tehlikeli olabilir.

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}

3
Bence bu Django hakkında, çünkü cevabını Rails + Unicorn :) ile ağ geçidi zaman aşımı sorunum düzeltildi düşünüyorum
ZiggyTheHamster

4

Gelen httpnginx kısmının (/etc/nginx/nginx.conf) ekleme veya değiştirme:

keepalive_timeout 300s

Gelen servernginx kısmının (/etc/nginx/sites-available/your-config-file.com) şu satırları ekleyin:

client_max_body_size 50M;
fastcgi_buffers 8 1600k;
fastcgi_buffer_size 3200k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;

In phpdurumda 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) 'de dosyaya değiştirin:

request_terminate_timeout = 300

Umarım yardımcı olurum.


Saati 10000 saniyeye değiştirirsem "kötü" bir şey olur mu?
utdev

Kötü bir şey olmaz, ancak hizmetiniz daha fazla zaman bekler. Değerini istediğiniz gibi değiştirebilirsiniz.
Jose Carlos Ramos Carmenates

1

Eğer tek boynuzlu at kullanırsan.

Bak topSunucunuzda. Unicorn muhtemelen şu anda% 100 CPU kullanıyor. Bu sorunun birkaç nedeni vardır.

  • HTTP isteklerinizi kontrol etmelisiniz, bazıları çok zor olabilir.

  • Tek boynuzlu atın sürümünü kontrol edin. Son zamanlarda güncellenmiş olabilirsiniz ve bir şey kırılmış olabilir.


0

Sunucu proxy'sinde böyle ayarlandı

location / {

                proxy_pass http://ip:80;                

                proxy_connect_timeout   90;
                proxy_send_timeout      90;
                proxy_read_timeout      90;

            }

Sunucu php böyle ayarlayın

server {
        client_body_timeout 120;
        location = /index.php {

                #include fastcgi.conf; //example
                #fastcgi_pass unix:/run/php/php7.3-fpm.sock;//example veriosn

                fastcgi_read_timeout 120s;
       }
}
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.