Ana içeriğe geç

Rehberler / HTTP durum kodları açıklandı

499 Durum Kodu: nginx'in Client Closed Request Anlamı

nginx günlüğünde bir 499, istemcinin, nginx yanıtı göndermeyi bitirmeden önce bağlantıyı kapattığı anlamına gelir. Resmi HTTP standardının bir parçası değildir; nginx bunu tamamen kendi erişim günlüğü için icat etti, böylece operatörler "istemci vazgeçti"yi diğer her başarısızlık türünden ayırabilsin.

499 durum kodu ne anlama gelir

499 Client Closed Request nginx'e özgüdür ve hiçbir RFC'de tanımlanmamıştır. 99'un üstündeki ve 600'ün altındaki kodlar genel olarak HTTP durum satırları için ayrılmıştır, ama 499 nginx'in kendi geleneğidir, nginx istemcinin bağlantısının, hâlâ üst akış uygulamasının yanıt vermesini beklerken, veya hâlâ yanıt gövdesini istemciye geri gönderirken düştüğünü tespit ettiğinde günlüğe kaydedilir. En yaygın gerçek dünya şekli, kendi zaman aşımı sunucunun alacağı süreden daha kısa olan bir istemci, tarayıcı sekmesi veya yük dengeleyici ile birleşmiş yavaş bir üst akıştır, bu yüzden istemci önce telefonu kapatır.

Günlüklerde nasıl görünür

499'u hiçbir zaman herhangi bir istemciye, tarayıcı, curl veya başka türlü, döndürülen bir durum kodu olarak görmeyeceksiniz, çünkü tanım gereği nginx onu göndereceği zaman istemci zaten gitmiştir. Sadece nginx'in kendi erişim günlüğünde var olur:

10.0.0.12 - - [19/Sep/2026:14:02:11 +0000] "GET /api/report HTTP/1.1" 499 0 "-" "python-requests/2.31"

0 baytlık yanıt boyutu ve üst akışınızın bilinen yanıt süresine göre zamanlama, en yararlı iki ayrıntıdır: geri hiçbir şey gönderilmeden üst akış zaman aşımınızın tam etrafında tutarlı olarak inen bir 499, kesinlikle "arka uç çok yavaştı ve bekleyen bir şey vazgeçti"ye işaret eder.

Bir 499'a ne sebep olur

  • Yavaş bir üst akış uygulaması. Arka uç, ister yavaş bir veritabanı sorgusu, harici bir API çağrısı, ister gerçekten ağır bir hesaplama olsun, bazı istemcinin veya aranın beklemeye istekli olduğundan daha uzun sürüyor.
  • Sunucunun ihtiyaç duyduğundan daha kısa bir istemci tarafı zaman aşımı. Kapatılmış bir tarayıcı sekmesi, aksaklık gösteren bir bağlantıdan vazgeçen bir mobil uygulama, veya yanıt gelmeden önce ateşlenen bir HTTP istemci kütüphanesinin kendi zaman aşımı.
  • Bir yük dengeleyici veya üst akış proxy'si önce zaman aşımına uğruyor. Gerçek son kullanıcı ile nginx arasında bir şey oturuyorsa, kendi zaman aşımı, gerçek son kullanıcı hiçbir şeyi açıkça iptal etmemiş olsa bile nginx'in 499 olarak günlüğe kaydettiği bir bağlantı kesilmesini tetikleyebilir.
  • Bir kullanıcı uzaklaşıyor veya yenileme yapıyor. Yavaş yüklenen bir sayfadan uzaklaşan, veya sabırsızca yenileme yapan biri, nginx bitirmeden önce uçuştaki bağlantıyı kapatır.
  • Zincir genelinde tutarsız zaman aşımı değerleri. Bir istemci, bir CDN, bir yük dengeleyici, ve nginx'in kendisinin her birinin farklı bir zaman aşımı olabilir, ve hangisi en kısaysa, diğerlerinin ne için yapılandırıldığına bakılmaksızın bağlantı kesilmesinin ne zaman olduğunu belirler.

Neden hiçbir zaman bir tarayıcıda görünmüyor

499 bir yanıt değildir, nginx'in bitirmeye hiç ulaşamadığı bir yanıt hakkında kendisine bıraktığı bir nottur. Günlüklerinizde bir 499 üreten bir sekmeye sahip bir kullanıcı hiçbir şey görmez: hiçbir hata sayfası, hiçbir durum kodu, sadece yüklenmeyi durduran bir sayfa veya asla çözülmeyen bir döner simge, çünkü tarayıcının oluşturacağı bir yanıt yoktu. Kullanıcı raporlu hatalara güvenmenin bunları tamamen kaçırmasının nedeni tam olarak budur; bir 499'un görünür olduğu tek yer sunucunun kendi erişim günlüğüdür.

499'lar nasıl düzeltilir ve azaltılır

499'ları ortadan kaldıran tek bir ayar yoktur, çünkü altta yatan neden istemcinin vazgeçmesi ile sunucunun bitirmesi arasındaki bir yarıştır, ve düzeltme o yarışın hangi tarafının gerçekten bozuk olduğuna bağlıdır. Etkilenen rota için üst akışın sürekli olarak yavaş olup olmadığını, yoksa bağlantı kesilmelerinin bir istemci, ağ veya ara etrafında toplanıp toplanmadığını belirleyerek başlayın, çünkü bunlar farklı düzeltmelere işaret eder.

  1. Önce üst akış yanıt süresini araştırın, çünkü yavaş bir arka uç en yaygın altta yatan nedendir. Etkilenen isteklerin gerçekte üst akışta ne kadar sürdüğüne bakın, sadece nginx'in bir 499 günlüğe kaydettiğine değil.
  2. Zincir genelinde zaman aşımı değerlerini kasıtlı olarak hizalayın, her katmanın varsayılanını yerinde bırakmak yerine: istemci, CDN, yük dengeleyici, ve nginx'in kendi proxy_read_timeout'u ve proxy_connect_timeout'u, hangisinin önce ateşlenmesi gerektiğine dair net bir anlayışla ayarlanmalıdır.
  3. Uygulamanız için istemci bağlantıyı kestikten sonra bile üst akışın işini bitirmesine izin vermek önemliyse, örneğin yarım bırakılmaması gereken bir yazmayı tamamlamak için, proxy_ignore_client_abort'u düşünün:
    proxy_ignore_client_abort on;
    Bu, orijinal bağlantı kesilmesi için 499 günlük girişini önlemez; bunun yerine üst akışın nginx'in istemci bağlantısı kesilse bile isteği çalıştırmaya devam edip etmediğini değiştirir.
  4. Kök neden gerçekten yavaş bir uç noktaysa gerçek üst akış işini hızlandırın, çünkü hiçbir zaman aşımı ayarlaması kendi başına çok uzun süren bir arka ucu düzeltmez; etkilenen rotanın arkasındaki belirli yavaş sorguları veya çağrıları profilleyin.
  5. Yükselen bir 499 oranını filtrelenecek günlük gürültüsü değil gerçek bir sinyal olarak ele alın, çünkü genellikle ya uygulamanızın yavaşladığı ya da zincirde bir yerde zaman aşımı yapılandırmanızın uyuşmadığı anlamına gelir.

Bir kesintiye dönüşmesi nasıl önlenir

499 hiçbir zaman istemciye görünür bir hata olarak ulaşmadığından, gerçek kullanıcılar sessizce istekleri terk ederken bile, gerçekten yavaş bir uç noktanın birisi erişim günlüklerini okuyana kadar fark edilmemesi kolaydır. Uç noktaya karşı gerçek yanıt süresini doğrudan ölçen ve kötüleştiğinde uyaran zamanlanmış bir HTTP kontrolü, isteklerin tamamen başarısız olmaya başlamasından önce 499'ları üreten yavaşlamayı yakalar. Birden fazla konumdan izleme, gerçekten yavaş bir arka ucu, sadece belirli bir ağ yolundaki istemciler için tetiklenen bir zaman aşımından ayırmaya da yardımcı olur.

İlgili hatalar

İstemcinin önce vazgeçmesi yerine nginx'in kendisinin üst akışı beklemekten vazgeçtiği standart, istemciye görünür eşdeğeri için 504 Gateway Timeout'a, standart istemci hatası ailesi için 4xx genel bakışına, ve zamanlama yerine orana bağlı farklı bir tür reddiye için 429 Too Many Requests'e bakın.

Sık sorulan sorular

499 gerçek bir HTTP durum kodu mu?

Hayır. Yanıt bitmeden önce bağlantısı kesilen bir istemci için nginx'in kendi günlükleme geleneğidir, ve istemci onu gönderileceği zaman zaten gitmiş olduğundan asla telden herhangi bir istemciye gönderilmez.

İzleme aracım neden hiçbir zaman bir 499 görmüyor?

Bir izleme kontrolü kendisi bir istemcidir, ve yavaş bir yanıttan vazgeçen kendisiyse, 499'u değil kendi zaman aşımı hatasını bildirir, çünkü bir durum kodu okuyacak hiçbir HTTP yanıtı hiç almaz. 499 sadece o istek için sunucunun kendi erişim günlüğü girişinde görünür.

Bir 499 sunucumun çöktüğü anlamına mı gelir?

Hayır. Özellikle sunucunun istemci bağlantıyı kestiğinde hâlâ çalıştığı, veya çalışmaya başlamak üzere olduğu anlamına gelir. Bir çökme tipik olarak bunun yerine bir şey yanıt verdiğinde 502 veya 500 üretir.

Bir istemci bağlantıyı kestiğinde üst akış işlemesini durdurabilir miyim?

Varsayılan olarak nginx, istemci gittikten sonra üst akışı beklemeyi genellikle durdurur, ama tam davranış proxy ayarlarınıza bağlıdır; proxy_ignore_client_abort on, nginx'e üst akışı terk etmek yerine isteğin devam etmesine izin vermesini söyler.

Sık 499'lar için en yaygın düzeltme nedir?

İstemci, herhangi bir ara proxy veya yük dengeleyici, ve nginx'in kendisi genelinde zaman aşımı değerlerini hizalamak, üst akışı ilk etapta yavaşlatan şeyi ele almakla birlikte. Hiçbiri tek başına kalıcı bir kalıbı genellikle çözmez.

Şimdi kontrol edin

Ücretsiz kontrolü kendi sitenizde çalıştırın - hesap gerekmez.

HTTP check

Bunu sürekli izleyin

Bir sorun çıktığı anda haberdar olun: HostTracker 300’den fazla konumdan kontrol eder ve size e-posta, SMS, Slack, Telegram ve daha fazlasıyla bildirim gönderir.

HostTracker özellikleri

Bu bölümde daha fazlası: HTTP durum kodları açıklandı