Nginx'i bir tür hizmet sağlayan sunucular kümesi için ters proxy olarak kullanmaya başladım.
Hizmet zaman zaman oldukça yavaş olabilir (Java ve JVM üzerinde bazen birkaç saniye sürebilen "tam çöp toplama" sıkışmış olur), bu yüzden proxy_connect_timeout
Nginx anlamaya yeterli zaman verecek 2 saniye için ayarladım hizmetin GC'ye yapıştığını ve zamanında yanıt vermeyeceğini ve isteği farklı bir sunucuya iletmesi gerektiğini unutmayın.
Ayrıca proxy_read_timeout
, hizmetin kendisi yanıtı hesaplamak için çok fazla zaman alırsa ters proxy'nin takılmasını önlemek için ayarladım - yine, zamanında yanıt vermek için yeterince ücretsiz olması gereken başka bir sunucuya isteği taşımalıdır.
Bazı ölçütleri çalıştırdım ve proxy_connect_timeout
bazı istekler tam olarak bağlantı zaman aşımı için belirtilen sürede döndüğü için düzgün çalıştığını görebiliyorum , hizmet sıkışmış ve gelen bağlantıları kabul etmiyor (hizmet yerleşik olarak Jetty kullanıyor sunucu kabı). proxy_read_timeout
Ben zaman aşımı sonra geri dönüşü belirtilen istekleri görebileceğiniz gibi de çalışır.
Sorun, proxy_read_timeout + proxy_connect_timeout
hizmet sıkışmışsa ve Nginx erişmeye çalıştığında bağlantıları kabul etmezse, ancak zaman aşımına uğrayan bazı istekleri görmeyi beklememdir , ancak Nginx zaman aşımına uğramadan önce - serbest bırakılır ve işlemeye başlar, ancak çok yavaştır ve Nginx okuma zaman aşımı nedeniyle iptal edilir. Hizmetin bu gibi durumlara sahip olduğuna inanıyorum, ancak birkaç kriter çalıştırdıktan sonra, birkaç milyon istek toplamı - yukarıdaki herhangi bir şeyde proxy_read_timeout
(daha büyük zaman aşımı olan) dönen tek bir istek göremedim .
Bağlantıdan sonra zaman aşımı sayacı sıfırlanmıyorsa (Ben henüz kod bakmak zorunda, bu yüzden bu sadece bir varsayım) Nginx bir hata nedeniyle olabileceğini düşünüyorum rağmen ben bu konuda herhangi bir yorum takdir ediyorum Nginx akış yukarı sunucudan hiçbir şey okumadıysa başarılı olur.
proxy_read_timeout
"global zaman aşımı" olmadığını, ancak 2 okuma işlemi arasında olduğunu unutmayın.
proxy_read_timeout + proxy_connect_timeout
.