HTTP proxy timeout değeri, bir proxy sunucusunun bağlantıyı sonlandırmadan önce hedef sunucudan veya istemciden yanıt beklerken geçireceği azami süreyi tanımlar. Bu mekanizma, takılı kalan bağlantıların kaynakları tüketmesini önlemek ve sorunsuz bir kullanıcı deneyimi sağlamak için kritik önemdedir. Doğru yapılandırılmış timeout değerleri, proxy sunucusunun kararlılığı ve performansı için şarttır.
Proxy timeout değerlerini anlamak
Proxy timeout değerleri, yanıt vermeyen bağlantılara yol açabilen çeşitli senaryoları ele almak için uygulanır. Bu senaryolar şunlardır:
- Yavaş veya yanıt vermeyen hedef sunucular: Bir hedef sunucu, yüksek yük, ağ sorunları veya sunucu tarafı hataları nedeniyle bir isteği işlemekte uzun süre harcayabilir. Timeout olmadan proxy süresiz bekler ve değerli kaynakları meşgul eder.
- Ağ tıkanıklığı: Proxy ile hedef sunucu veya istemci arasındaki ağ tıkanıklığı veri aktarımında gecikmelere yol açarak bağlantıların takılmasına neden olabilir.
- İstemci tarafı sorunları: Bir istemci, çöken bir tarayıcı veya ağ bağlantısının kopması nedeniyle istek gönderdikten sonra yanıt vermeyi bırakabilir.
- Hizmet reddi (DoS) saldırıları: Saldırganlar, işlenmesi uzun sürecek şekilde tasarlanmış isteklerle proxy sunucusunu doldurup sunucunun kaynaklarını fiilen tüketebilir. Timeout değerleri bu tür saldırıların etkisini azaltmaya yardımcı olur.
Proxy işleyişiyle ilgili birkaç timeout türü vardır. En yaygın olanları şunlardır:
- Connect timeout: Proxy'nin hedef sunucuyla bağlantı kurmak için bekleyeceği azami süre.
- Read timeout: Bağlantı kurulduktan sonra proxy'nin hedef sunucudan veri almak için bekleyeceği azami süre.
- Send timeout: Proxy'nin hedef sunucuya veya istemciye veri göndermek için bekleyeceği azami süre.
- Idle timeout: Bir bağlantının kapatılmadan önce boşta (veri aktarımı olmadan) kalabileceği azami süre.
Proxy timeout değerlerini yapılandırma
Proxy timeout yapılandırması, kullanılan proxy sunucu yazılımına bağlıdır. Bazı popüler proxy sunucuları için örnekler:
Apache HTTP Server (mod_proxy)
Apache'nin mod_proxy modülü timeout yapılandırması için birkaç yönerge sunar:
-
ProxyTimeout: Hem bağlantı hem de okuma işlemleri için timeout değerini saniye cinsinden ayarlar.apache <Proxy *> ProxyTimeout 60 </Proxy> -
Timeout: Sunucunun istemciden veya arka uç sunucudan yanıt alması için genel timeout değerini ayarlar. Bu, hem bağlantı hem de okuma işlemlerini etkileyebilir.apache Timeout 300 -
ProxyReceiveBufferSize: Arka uç sunucudan veri almak için kullanılan arabelleğin boyutunu ayarlar. Daha küçük bir arabellek, veri aktarımlarını daha sık hale getirerek bazen timeout sorunlarına yardımcı olabilir.apache ProxyReceiveBufferSize 8192
Yapılandırma dosyasında değişiklik yaptıktan sonra Apache'yi yeniden başlatın.
sudo systemctl restart apache2
Nginx
Nginx, çeşitli yönergeler aracılığıyla timeout değerleri üzerinde daha ayrıntılı denetim sağlar:
-
proxy_connect_timeout: Upstream sunucuyla bağlantı kurma timeout değerini belirtir.nginx http { server { location / { proxy_pass http://backend_server; proxy_connect_timeout 60s; } } } -
proxy_read_timeout: Upstream sunucudan yanıt alma timeout değerini belirtir.nginx http { server { location / { proxy_pass http://backend_server; proxy_read_timeout 120s; } } } -
proxy_send_timeout: Upstream sunucuya istek gönderme timeout değerini belirtir.nginx http { server { location / { proxy_pass http://backend_server; proxy_send_timeout 60s; } } } -
keepalive_timeout: Keep-alive bağlantıları için timeout değerini belirtir.nginx http { keepalive_timeout 75s; }
Yapılandırma dosyasında değişiklik yaptıktan sonra Nginx'i yeniden yükleyin.
sudo nginx -s reload
Squid
Squid, çeşitli timeout değerlerini denetlemek için yapılandırma dosyasında (squid.conf) timeout yönergesini kullanır:
request_timeout: Squid'in istemciden eksiksiz bir HTTP isteği almak için bekleyeceği azami süre.connect_timeout: Squid'in hedef sunucuyla bağlantı kurmak için bekleyeceği azami süre.read_timeout: Squid'in hedef sunucudan veri almak için bekleyeceği azami süre.-
client_lifetime: Squid'in boştaki bir istemci bağlantısını açık tutacağı azami süre.squid request_timeout 30 seconds connect_timeout 60 seconds read_timeout 120 seconds client_lifetime 7200 seconds
Yapılandırma dosyasını değiştirdikten sonra Squid'i yeniden başlatın.
sudo squid -k reconfigure
Timeout yönergelerinin karşılaştırması
| Özellik | Apache (mod_proxy) | Nginx | Squid |
|---|---|---|---|
| Connect timeout | ProxyTimeout |
proxy_connect_timeout |
connect_timeout |
| Read timeout | ProxyTimeout |
proxy_read_timeout |
read_timeout |
| Send timeout | N/A | proxy_send_timeout |
N/A |
| Idle timeout | N/A | keepalive_timeout |
client_lifetime |
| Genel timeout | Timeout |
N/A | request_timeout |
Timeout yapılandırması için en iyi uygulamalar
- Makul varsayılanlarla başlayın: Orta düzeyde timeout değerleriyle başlayın ve gözlemlenen performansa ve hata günlüklerine göre ayarlayın. İyi bir başlangıç noktası connect timeout için 60 saniye, read timeout için 120 saniye olabilir.
- Hata günlüklerini izleyin: Proxy sunucusunun hata günlüklerini timeout kaynaklı hatalar için düzenli olarak kontrol edin. Bu hatalar, timeout değerlerinin çok kısa olup olmadığına veya başka temel sorunlar bulunup bulunmadığına dair değerli ipuçları verir.
- Ağ koşullarına göre ayarlayın: Proxy sunucusu yüksek gecikmeli veya sık tıkanan bir ağda çalışıyorsa timeout değerlerini artırmayı düşünün.
- Uygulama gereksinimlerini göz önünde bulundurun: Farklı uygulamaların gecikme ve timeout toleransı farklıdır. Timeout değerlerini buna göre ayarlayın. Örneğin gerçek zamanlı uygulamalar, toplu işlem uygulamalarına göre daha kısa timeout değerleri gerektirebilir.
- Circuit breaker uygulayın: Kritik uygulamalarda, timeout değerleriyle birlikte circuit breaker desenlerini Microsoft Circuit Breaker Deseni{rel="nofollow"} uygulamayı düşünün. Circuit breaker'lar, hatalı sunuculara istek gönderilmesini otomatik olarak engelleyerek dayanıklılığı daha da artırır.
- Yük testi: Gerçek dünyadaki trafik desenlerini benzetmek ve ağır yük altında olası timeout sorunlarını belirlemek için yük testi yapın. Bu, ilgili ortam için en uygun timeout değerlerini belirlemeye yardımcı olur.
- Güvenlik değerlendirmeleri: Çok uzun timeout değerleri proxy sunucusunu hizmet reddi saldırılarına açık hale getirebilir. Dayanıklılık ihtiyacını güvenlik değerlendirmeleriyle dengeleyin.
Timeout sorunlarını giderme
Timeout hatalarıyla karşılaştığınızda şu sorun giderme adımlarını izleyin:
- Ağ bağlantısını doğrulayın: Proxy sunucusunun hem istemciye hem de hedef sunucuya kararlı bir ağ bağlantısı olduğundan emin olun. Ağ sorunlarını teşhis etmek için
pingvetraceroutegibi araçları kullanın. - Sunucu yükünü kontrol edin: Hem proxy sunucusunun hem de hedef sunucunun CPU ve bellek kullanımını izleyin. Yüksek yük gecikmelere ve timeout tetiklenmesine yol açabilir.
- Hata günlüklerini analiz edin: Proxy sunucusunun hata günlüklerini belirli timeout hataları için inceleyin. Günlükler timeout türü, ilgili hedef sunucu ve hatanın zamanı hakkında bilgi vermelidir.
- Timeout değerlerini (geçici olarak) artırın: Teşhis adımı olarak timeout değerlerini geçici olarak artırıp hataların kaybolup kaybolmadığına bakın. Kaybolursa, özgün timeout değerlerinin çok kısa olduğu anlaşılır.
- Hedef sunucu performansını inceleyin: Hedef sunucu sürekli yavaşsa performansını araştırın. Veritabanı darboğazlarını, verimsiz kodu veya gecikmelere yol açabilecek diğer sorunları arayın.
- Proxy sunucu yapılandırmasını gözden geçirin: Timeout yönergelerinin doğru ayarlandığından ve çakışan ayarlar olmadığından emin olmak için proxy sunucusunun yapılandırma dosyasını tekrar kontrol edin.
- Ağ trafiğini izleyin: İstemci, proxy sunucusu ve hedef sunucu arasındaki ağ trafiğini yakalayıp analiz etmek için
tcpdumpveya Wireshark gibi ağ izleme araçlarını kullanın. Bu, ağ tıkanıklığını veya diğer sorunları belirlemeye yardımcı olur.
Sonuç
Proxy timeout değerleri, iyi yapılandırılmış bir proxy sunucusunun kritik bir bileşenidir. Farklı timeout türlerini ve bunların nasıl yapılandırılacağını anlayarak takılı bağlantıları önleyebilir, sunucu kararlılığını artırabilir ve kullanıcı deneyimini iyileştirebilirsiniz. Doğru yapılandırılmış timeout değerleri, proaktif izleme ve sorun giderme ile birleştiğinde sağlam ve güvenilir bir proxy altyapısı için şarttır.
