뚠뚠멍의 생각들

nginx'i Web Sunucusu Olarak Kullanırken Temel Ayarlar

  • Yazım Dili: Korece
  • Baz Ülke: Tüm Ülkelercountry-flag
  • BT

Oluşturulma: 2024-09-26

Oluşturulma: 2024-09-26 21:20

Nginx, açık kaynak kodlu bir web sunucusu veya web proxy sunucusu olarak sıkça kullanılır.

Doğru yapılandırıldığında statik içeriği verimli bir şekilde sunabilir.

Bu makalede, bazı önemli ayarlarını kaydetmek istiyorum.


Performansla İlgili Bazı Önemli Ayarlar

1. gzip Sıkıştırma

Bir web sitesini yüklediğinizde, web sunucusundan JavaScript, resim, HTML, CSS gibi birçok dosya indirirsiniz.

Bu içeriği ham halde göndermek yerine, gzip sıkıştırmasını kullanarak iletilen veri miktarını önemli ölçüde azaltabilirsiniz.


Yani, bunu uyguladığınızda;

- Veri miktarı azalır ve bant genişliğinden tasarruf edilir.

- Sunucu kaynaklarından tasarruf edilebilir.

- Kullanıcı açısından, gerçek yükleme hızı artar.


Öte yandan, sunucu içeriği yanıtlamadan önce gzip sıkıştırmasını gerçekleştirmelidir; bu nedenle sunucunun CPU yükü artabilir.

Hangi dosya türlerinin sıkıştırılacağı, sıkıştırma seviyesi ve ne kadar büyük dosyaların sıkıştırılacağı gibi hususlar, üretim ortamına uygulamaya geçmeden önce mutlaka test edilmelidir.


İşte gzip ile ilgili bazı ayarlar:

* gzip_vary, istemcinin gzip'i destekleyip desteklemediğine bağlı olarak içeriği sıkıştırılmış ve sıkıştırılmamış versiyonlarda gönderebilmeyi sağlar. (İstemcinin istek başlığında (Accept-Encoding) bulunan bilgiye göre farklı versiyonlar sunulur.)


2. proxy_buffer Ayarı

Nginx, istemciye yanıt göndermeden önce yanıtı bir tampon belleğe (buffer) kaydeder.

Web sunucusu istemciye yanıt gönderdiğinde, istemcinin hızı yavaşsa sunucu veri göndermek için beklemek zorundadır (ağ darboğazı).

Bu sırada sunucu kaynağı kullanılmaya devam eder. Bunu çözmek için tampon bellek kullanılır ve istemci işlem hızından bağımsız olarak yanıt geçici olarak işlenir. Bu, aşağıdaki avantajları sağlar:

- Sunucu yükünün optimize edilmesi

- Ağ darboğazının azaltılması

※ Tampon belleğinin boyutunu çok büyük ayarlarsanız, gerçek zamanlı veri aktarımı gibi metin akışı (text streaming) gecikebilir; bu nedenle mutlaka test edilmelidir. Özellikle son zamanlarda birçok yapay zeka tabanlı hizmet ortaya çıktığı için, metin akışı sorun yaşarsanız bu ayarı mutlaka kontrol edin.


3. worker ve http Ayarları

worker'lar, istemci isteklerini işleyen işlemlerdir ve sunucunun CPU çekirdekleri başına kaç tane olacağı ayarlanabilir.

http genellikle istek - bağlantı - yanıt - bağlantı kesme şeklinde çalışır. Birden fazla istek için bağlantı kaynaklarını azaltmak amacıyla istemci bağlantıları açık tutulabilir. Bu, keep alive ayarlarıdır.

Bu iki ayarı birlikte ele alma sebebimiz şu:

Eğer sunucunuzda 4 çekirdek varsa, teorik olarak mümkün olan bağlantı sayısı 1.024 * 4 = 4.096 olur.

(Kaynak veya trafik durumuna göre bu sayı tam olmayabilir)

4.096 istemci aynı anda bağlanıp 65 saniye boyunca tüm keepalive'ları kullanıyorsa,

4.097. kullanıcı bağlanmaya çalıştığında bağlantı kuramaz ve bu da yanıt gecikmesine neden olabilir.


Bu nedenle, sunucu kaynaklarının otomatik ölçeklendirme (auto scaling) gibi yöntemlerle istikrarlı olduğunu varsayarsak, olay anında yanıt gecikmesi yaşanıyorsa yukarıdaki ayarlar dolaylı olarak etki edebilir.


4. Diğer - location bloğu

proxy buffer gibi bazı ayarlar, istek URL'sine göre uygulanabilir.

* keep-alive gibi bazı ayarlar HTTP/Sunucu seviyesinde uygulanır ve blok bazında ayarlanamaz.

server {
listen 80;
server_name example.com;


Yukarıdaki ayarlar web performansını optimize etmenize yardımcı olur. Çeşitli test senaryolarını göz önünde bulundurarak yeterince test yaptıktan sonra sunucu performansını optimize edin!

* Değiştirilen nginx ayarlarını sunucu çalışma zamanı kesintisi olmadan uygulayabilirsiniz, bu nedenle çoğunlukla güvenilirdir.






Yorumlar0