Nginx hata günlüğünden daha fazla nasıl hata ayıklayabilirim?


34

Şu anda oldukça büyük bir HTTP seli alıyorum ve bu, nginx reverse proxy'imin 502 Kötü Ağ Geçidi üretmesine neden oluyor.

Arka uç sunucumun proxy'si olarak nginx çalıştıran bir ön uç sunucum var, ancak bu yalnızca bir sürü connect() failed (110: Connection timed out) while connecting to upstreamhata alıyor. Onlardan ton. Arka uç bağlamak için proxy sunucusunu atlarsam, siteyi gayet iyi çalıştırabilirim, bu yüzden bir yerde ters proxy'de olduğunu biliyorum. Ancak, neden zaman aşımına uğradığını belirlemek nasıl bir fikrim yok.

Herhangi bir yardım?

CentOS 6.2’de nginx 1.2.3 kullanıyor


Nginx'i en son sürüme güncelleyerek başlayabilirsiniz. Buna rağmen,
1.2.3'te

2
.... ve sonra NGINX'DEKİ BAĞLANTILARI KABUL EDEN NEDİR
symcbean

Arka uç sunucunuz nedir? Nginx'in verdiği hata aslında arka uçtan geldiğinde hatalar yüzünden kafam karıştı. Burada durum böyle görünmüyor, ancak sorunuzu daha fazla ayrıntıyla güncellemeniz gerekiyor.
jeffatrackaid

Ayrıca, özel / halka açık bir ağ üzerinden arka uca bağlanıyor musunuz? Proxy IP'leri güvenlik duvarlarında, ddoslarda veya diğer ip / hız sınırlayıcı tip araçlarda beyaz listeye alınmış mı? Arka uç sunucusundaki bir netstat neye benziyor? Kaç tane bağlantı açık? Arka uçtaki MaxClients nedir? Bunları yoruyor musun?
jeffatrackaid

Yanıtlar:


19

Hata ayıklama için Nginx hata günlüğü seviyenizi zaten yükselttiğinizi farz ediyorum. Eğer değilse, oradan başlayın.

En iyisi muhtemelen straceNginx tarafından yapılan aramaları görüntülemek için kullanacak. Özellikle, connect()aramalara dikkat etmek ve bunların geri dönüş kodlarına dikkat etmek istersiniz ( man 2 connectburada arkadaşınız olabilir).

Bu bilgilere sahip olduktan sonra, sorunun ön uç vekilinizle sınırlı olup olmadığı veya vekil ile arka uç uygulama sunucusu arasındaki etkileşimlerle ilgisi olup olmadığı konusunda daha iyi bir tahminde bulunabilirsiniz.


37

Dtrace problarına koymak istemediğiniz sürece bundan daha bilgiçlik kazanmaz:

  1. Hata ayıklama günlüğü seviyesini ayarlayın: /etc/nginx/nginx.conf:

    ...
    http {
            ...
            error_log /var/log/nginx/error.log debug; # todo testing remove me not for production use
            ...
    }
    
  2. Tcpdump dosyasını başka bir pencerede kurun:

    tcpdump not port 22 -vvv -s0 -q -XXX
    
  3. Günlük dosyalarını başka bir pencerede izleyin:

    tail -f /var/log/nginx/*
    
  4. Başlangıçta nginx ile etkileşimli strace:

    # top of /etc/nginx/nginx.conf:
    
    daemon off; # todo testing remove me not for production use
    

    Ve sonra

     $ strace nginx 
    

Derlenmiş bir nginx ile daha fazla hata ayıklama yapılabilir --with-debug. Çalıştırarak kontrol edin:

    nginx -V 2>&1 | grep -- '--with-debug' # no output if not debug

Varsayılan olarak derlenmemiş başka bir iyi modül: HttpStubStatusModule . Her ihtimalde, düzgün bir kurulum özel derlenmiş bir nginx gerektirecektir (distro paketleme araçlarını kullanarak şiddetle tavsiye edilir).

Bunların çoğu üretimde kullanım için uygun değil, daha fazla istatistik gerekiyorsa, nginx'i gperf ile derlemeye bakın.


2. adımda, aşağıdakiler benim için çalışıyor: tcpdump -i herhangi bir bağlantı noktası 22 -vvv -s0 -q -XXX
ccppjava

5

Trafik yoğunluğunu ayıklamış gibi görünüyorsunuz.

Direktifi debugile kullanın , debug_connectionböylece nginx hata günlüğü sadece IP adresinizden hata ayıklama günlüklerini gösterir.

Tüm nginx yapılandırması için hata ayıklama seçeneğini etkinleştirmek yerine bazı yararlı hata günlükleri görmeye başladığınızda, reverse_proxy bağlantısından sorumlu error_log /path/to/some/file/ debug;olan location {..}bloğa ayrı bir yönerge ekleyin .

Bu sayede hata ayıklama hata günlüğünü sadece IP adresinizden izole edebilirsiniz.

Yaptığınız istekle (tarayıcınızdan) ilişkilendirmeyi deneyin.

Örneğin, lütfen kontrol edin: https://easyengine.io/tutorials/nginx/debugging/

Bir seviye ileride Nginx'in HttpEchoModule'ünü kullanabilirsiniz.


2

Nginx'i hiçbir zaman bir darboğaz olarak bulamadım, çoğu durumda arka uçlarından daha yetenekli. Ancak Nginx olmadan test ettiyseniz ve herhangi bir hata bulamadıysanız, her ikisi de olacaktır (veya her ikisi de):

  1. Nginx yapılandırma sorunu
    1. Yukarı akış zaman aşımı değeri yanlış
    2. Giriş yönündeki yanlış prob URL'si
    3. Çok az işçi
    4. Vb.
  2. İşletim sistemi TCP / IP darboğaz
    1. Proxy'nin kendisinin açık bağlantı noktalarının ve durumların çoğaltılmasına neden olabileceği olabilir. Dosya tanımlayıcıları, portları, TCP bağlantıları

Nginx yapılandırmalarınızı görmeden, kimse eskisi hakkında yorum yapamaz. OS'den uygun çıktılar olmadan kimse bu konuda yorum yapamaz.

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.