Skip to content

HAProxy backend sunucularına istemci ip adresini aktarma

Vekil sunucu (Proxy) ve/veya yük dengeleme (Load Balancing) servislerinin arkasında çalışan sistemler istemci ip adresi olarak bu servislerin ip adresini alırlar. Bu servislerin çoğu X-Forwarded-For ya da benzer bir ek başlık ile gerçek istemci adresini de sunuculara iletme desteği sunarlar.

HAProxy yük dengeleme servisinde de bu iş için yapılandırma dosyasına `option forwardfor` seçeneğinin eklenmesi gerekiyor. Bu seçenek ihtiyaca göre `defaults`, `frontend`, `listen` ya da `backend` bölümlerinden birinde tanımlanabiliyor. Yalnız bu seçenek ile ilgili çok önemli bir detay var.

Bu seçenek, HAProxy’nin çalışma yapısı gereği, geliştirme ya da test ortamında farkına varması güç bir soruna yol açıyor. Bir istemci HAProxy ile bağlantı kurduğunda bağlantının sadece ilk isteği analiz ediliyor, log’lanıyor ve işleniyor. Dolayısıyla X-Forwarded-For başlığı sadece ilk istekte ekleniyor, aynı bağlantıda gelen sonraki isteklerde sunuculara HAProxy ip adresi iletiliyor. Bu da yazılım tarafında istemci adresi olarak tutarsız değerler gelmesine neden oluyor. HAProxy loglarında da bu duruma dair bir kayıt oluşmadığından sorunun kaynağını tespit etmek zor olabiliyor.

Bu sorunun önüne geçmek ve tüm isteklerde bu başlığın eklenmesini sağlamak için ise yapılandırma dosyasına `option http-server-close` seçeneğinin eklenmesi gerekiyor. Bu seçenek de ihtiyaca göre `defaults`, `frontend`, `listen` ya da `backend` bölümlerinden birinde tanımlanabiliyor. Eğer `defaults` bölümünde tanımlandıysa ve iptal edilmek istenen bir bölüm varsa `no option httpclose` şeklinde iptal edilebiliyor. Bu seçenek istemciyle HAProxy arasındaki bağlantıyı açık tutarken, HAProxy ve sunucu arasındaki bağlantıyı kapatıyor ve tüm isteklerde başlığın doğru şekilde eklenmesini sağlıyor.

http-server-close seçeneği HAProxy’e 1.4 sürümünde eklendi. Daha eski bir sürüm kullanılıyorsa keepalive desteğini feda edip `option httpclose` seçeneğini kullanmak gerekiyor.

Post a Comment

You must be logged in to post a comment.