Nginx ters vekil sunucu önbellek sunucusu kurulumu

İlgili Etiketler:1. Nginx Ingress Controller
2. Nginx günlüklerini ayrıştırma

Özet: Dahili ağın bağlantı isteklerini (VPN/NAT gibi) İnternet'e yönlendirmek için kullanılır.

Vekil sunucu hizmetleri temel olarak ileri vekil sunucu ve ters vekil sunucu olarak ikiye ayrılır:

İleri vekil sunucu: İstemci vekil sunucuyu belirtir ve doğrudan hedef web sunucusuna gönderilmesi amaçlanan HTTP isteğini vekil sunucuya gönderir; ardından vekil sunucu web sunucusuna erişir ve web sunucusunun yanıtını istemciye döndürür:

Ters vekil sunucu: İleri vekil sunucunun aksine, yerel alan ağı İnternet'e kaynak sağlıyorsa ve İnternet'teki diğer kullanıcıların yerel alan ağındaki kaynaklara erişmesine izin veriyorsa bir vekil sunucu kurulabilir; bu sunucunun sağladığı hizmet ters vekil sunucudur. Ters vekil sunucu İnternet'ten gelen bağlantıları kabul eder, ardından isteği dahili ağdaki sunucuya iletir ve Yanıtı geri gönderir.

İnternet'te bağlantı talep eden istemciler:



1. nginx ters vekil sunucu: web sunucusunun zamanlayıcısı



1. Ters Vekil Sunucu, vekil sunucunun istemcinin bağlantı isteğini kabul etmesi ve ardından isteği ağdaki web sunucusuna (apache, nginx, tomcat, iis vb. olabilir) iletmesi anlamına gelir; web sunucusundan elde edilen sonuç, bağlantı talep eden istemciye döndürülür ve vekil sunucu dış dünyaya karşı bir sunucu görevi görür.

Yukarıdaki şekilde görüldüğü üzere: ters vekil sunucu, vekil websitesi Web sunucusu Http isteğini alır ve isteği iletir. Ayrıca bir ters vekil sunucu olarak nginx, istekleri kullanıcı isteğinin içeriğine göre farklı arka uç web sunucularına iletebilir; örneğin statik ve dinamik içerik ayrımı yapabilir veya nginx üzerinde birden fazla sanal barındırma oluşturarak tarayıcıda farklı etki alanları (url'ler) girildiğinde arka uçtaki farklı web sunucularına veya web kümelerine başarıyla erişim sağlayabilir.

2. Ters vekil sunucunun rolü nedir?

①Website güvenliğini koruma: İnternet'ten gelen her istek önce bir vekil sunucudan geçmelidir;

wKioL1jsz9yAHyulAABvTU4R-Ew435.png-wh_50

②Önbellekleme işlevini yapılandırarak web isteklerini hızlandırma: Gerçek web sunucusundaki bazı statik kaynaklar önbelleğe alınarak gerçek web sunucusunun yük baskısı azaltılabilir;

wKiom1jsz-nwYDqSAABjrKK3l5E661.png-wh_50

③ Yük dengeleme gerçekleştirme: Bir yük dengeleyici sunucu olarak görev yaparak istekleri dengeli bir şekilde dağıtır ve kümedeki her sunucunun yük baskısını dengeler;

wKiom1jsz__Q7RpoAAJQnYSWdA8640.png-wh_50

2. Nginx nedir



1. Nginx'e giriş

Nginx hafif bir web sunucusu, ters vekil sunucu ve e-posta vekil sunucusudur. Kararlılığı, zengin özellik seti, örnek yapılandırma dosyaları ve düşük sistem kaynağı tüketimiyle tanınır. Nginx (engine x şeklinde telaffuz edilir) Rus programcı Igor Sysoev tarafından geliştirilmiştir. Başlangıçta büyük Rus portalı ve arama motoru Rambler (Rusça: Рамблер) tarafından kullanılmıştır. Bu yazılım BSD benzeri bir lisans altında yayınlanmıştır ve UNIX, GNU/Linux, BSD, Mac OS X, Solaris ve Microsoft Windows üzerinde çalışabilir.

Nginx'in Uygulama Durumu

Nginx halihazırda Rusya'nın en büyük portal sitesi olan Rambler Media'da (www.rambler.ru) çalışmaktadır ve Rusya'daki sanal barındırma platformlarının %20'sinden fazlası Nginx'i ters vekil sunucu olarak kullanmaktadır.

Çin'de Taobao, Sina Blog, Sina Podcast, Netease News, Liujianfang, 56.com, Discuz!, Shuimu Community, Douban, YUPOO, Domestic, Xunlei Online gibi birçok website Nginx'i web sunucusu veya ters vekil sunucu olarak kullanmaktadır.

2. Nginx'in temel özellikleri

(1) Çapraz platform: Nginx çoğu işletim sisteminde derlenip çalıştırılabilir ve ayrıca bir Windows sürümü de mevcuttur;

(2) Yapılandırma çok basittir: Kullanmaya başlamak oldukça kolaydır.

(3) Engelsiz, yüksek eşzamanlı bağlantılar: Resmi testler 50.000 eşzamanlı bağlantıyı destekleyebileceğini göstermektedir; gerçek üretim ortamında ise 20.000 ila 30.000 eşzamanlı bağlantıda çalışır. (Bu, Nginx'in en yeni epoll modelini kullanması sayesindedir);

Not:

Bir web sunucusu için öncelikle bir isteğin temel sürecine bakılır: bağlantı kurma - veri alma - veri gönderme. Sistem alt yapısı açısından yukarıdaki süreç (bağlantı kurma - veri alma - veri gönderme) sistem tabanında bir okuma ve yazma olayıdır.

Engelleyen çağrı yöntemi kullanılırsa, okuma ve yazma olayları hazır olmadığında tek yol beklemektir; mevcut iş parçacığı askıya alınır ve okuma/yazma işlemleri ancak olaylar hazır olduğunda gerçekleştirilebilir.

Engelsiz çağrı yöntemi kullanılırsa: Olay anında geri döner ve olayın henüz hazır olmadığını, daha sonra tekrar gelmeniz gerektiğini bildirir. Bir süre sonra olay tekrar kontrol edilir; olay hazır olana kadar bu kontroller devam eder. Bu arada başka işler yapılabilir ve olayın durumu tekrar kontrol edilebilir. Engellemese de olayın durumunu zaman zaman kontrol etmek gerekir; daha fazla iş yapılabilir ancak ek yük az değildir. Engelsiz çağrı, sonuca hemen ulaşılamadığında çağrının mevcut iş parçacığını engellemeyeceği anlamına gelir.

(4) Olay güdümlü: İletişim mekanizması daha büyük eşzamanlı bağlantıları desteklemek için epoll modelini benimser.

Engelsiz yöntem, olayların durumunu sürekli kontrol ederek okuma/yazma işlemlerinin yapılıp yapılmayacağına karar verir ve bu da önemli bir ek yük getirir; bu nedenle eşzamansız engelsiz olay işleme mekanizması geliştirilmiştir. Bu mekanizma birden fazla olayı aynı anda izlemenizi sağlar. Çağrılar engelsizdir ancak bir zaman aşımı süresi belirlenebilir. Zaman aşımı süresi içinde bir olay hazır olursa yanıt döndürülür. Bu mekanizma, engelleyen ve engelsiz çağrıların yukarıda belirtilen iki sorununu çözer.

Epoll modelini örnek alırsak: Olay hazır olmadığında epoll'a (kuyruğa) konur. Bir olay hazırsa işlenir; olay hazır değilse epoll'da bekler. Bu sayede çok sayıda eşzamanlı isteği eşzamanlı olarak işleyebiliriz. Elbette buradaki eşzamanlı istekler işlenmemiş istekleri ifade eder. Yalnızca bir iş parçacığı olduğu için doğal olarak aynı anda yalnızca bir istek işlenebilir. Sadece istekler arasında sürekli bir geçiş yapılır. Bu geçiş, eşzamansız olay hazır olmadığı için aktif olarak vazgeçildiğinde gerçekleşir. Buradaki geçişin bir maliyeti yoktur; bunu birden fazla hazırlanmış olay arasında döngüsel olarak gezinmek olarak anlayabilirsiniz.

Çok iş parçacıklı yöntemle karşılaştırıldığında, bu olay işleme yöntemi büyük avantajlar sunar. İş parçacığı oluşturmaya gerek yoktur ve her istek çok az bellek kaplar. Bağlam değiştirme yoktur. Olay işleme çok hafiftir ve eşzamanlılık sayısı yüksektir. Bu durum gereksiz kaynak israfına (bağlam değiştirme) yol açmaz. Apache sunucusunda her istek için özel bir çalışan iş parçacığı bulunur ve eşzamanlılık sayısı binlere ulaştığında aynı anda binlerce iş parçacığı istekleri işler. Bu, işletim sistemi için büyük bir zorluktur: İş parçacığının neden olduğu bellek kullanımı çok fazladır, iş parçacığının bağlam değiştirmesinin neden olduğu CPU ek yükü çok büyüktür ve doğal olarak performans artamaz; bu da yüksek eşzamanlılık senaryolarında performansta ciddi düşüşe yol açar.

Özet: Nginx, eşzamansız engelsiz olay işleme mekanizması aracılığıyla, süreç tarafından döngüsel olarak işlenen birden fazla hazırlanmış olayı uygular ve böylece yüksek eşzamanlılık ve hafiflik sağlar.

(5) Master/Worker yapısı: Bir ana süreç bir veya daha fazla çalışan süreç oluşturur.

Not: Master-Worker tasarım deseni temel olarak Master ve Worker olmak üzere iki ana bileşeni içerir. Master, Worker kuyruğunu yönetir ve paralel yürütme için istekleri birden fazla Worker'a gönderir. Worker esas olarak gerçek mantıksal hesaplamaları yapar ve sonuçları Master'a döndürür.

Nginx'in bu süreç modelini benimsemesinin faydaları nelerdir? Bağımsız süreçlerin kullanılması birbirlerini etkilemelerini önler. Bir süreç sonlandığında diğer süreçler çalışmaya devam eder ve hizmet kesintiye uğramaz. Master süreci yeni Worker sürecini hızla yeniden başlatır. Elbette Worker sürecinin anormal çıkışı programdaki bir hatadan kaynaklanmalıdır. Anormal çıkış, mevcut Worker üzerindeki tüm isteklerin başarısız olmasına neden olur ancak tüm istekleri etkilemez, böylece risk azaltılmış olur.

(6) Düşük bellek tüketimi: Büyük eşzamanlı istekleri işlerken bellek tüketimi çok düşüktür. 30.000 eşzamanlı bağlantı altında, 10 Nginx süreci tarafından yalnızca 150 MB bellek tüketilir (15 MB * 10 = 150 MB).

(7) Yerleşik sağlık kontrolü işlevi: Nginx vekil sunucusunun arka ucundaki bir web sunucusu çökerse ön uç erişimini etkilemez.

(8) Bant genişliği tasarrufu: GZIP sıkıştırması desteklenir ve tarayıcı tarafından yerel olarak önbelleğe alınan Header başlığı eklenebilir.

(9) Yüksek kararlılık: Ters vekil sunucu olarak kullanıldığında kesinti olasılığı minimumdur.



3. Nginx+apache ile web sunucusu kümeleri için yük dengeleme oluşturma



nginx ters vekil sunucu yapılandırması

Nginx'i ters vekil sunucu ve yük dengeleyici olarak yapılandırın; arka uç sunucu bağlantı sayısını azaltmak ve arka uç web sunucusunun sağlığını kontrol etmek için önbellekleme işlevini kullanarak statik sayfaları nginx'te önbelleğe alın.



wKiom1js0B-iFnITAACVfFt6894317.png-wh_50

1. Nginx kurulumu

Ortam:

İS: centos7.2

nginx: 192.168.31.83

apache1: 192.168.31.141

apache2: 192.168.31.250

zlib-devel ve pcre-devel gibi bağımlılıkları kurun

[root@www ~]# yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel

Not:

Arka uç web yük dengelemeyi gerçekleştirmek için proxy ve upstream modüllerini birleştirme

Proxy modülünü kullanarak statik dosya önbellekleme

Nginx'in varsayılan ngx_http_proxy_module modülü ve ngx_http_upstream_module modülü ile birleştirme

Arka uç sunucusunun sağlık kontrolünü uygulamak için üçüncü taraf modül nginx_upstream_check_module da kullanılabilir

Cookie oturum yapışkanlığını (oturumu koruma) uygulamak için nginx-sticky-module uzantı modülünü kullanma

Daha güçlü önbellek temizleme işlevi gerçekleştirmek için ngx_cache_purge kullanma

Yukarıda belirtilen iki modül üçüncü taraf uzantı modüllerine aittir. Kaynak kodunu önceden indirmeniz ve ardından derleme sırasında --add-module=src_path parametresiyle birlikte kurmanız gerekir.



nginx kurulumu

[root@www ~]# groupadd www #www grubu ekle

[root@www ~]# useradd -g www www -s /sbin/nologin #nginx çalışma hesabı www oluştur ve www grubuna ekle, www kullanıcısının sisteme doğrudan giriş yapmasına izin verme

#tar zxf nginx-1.10.2.tar.gz

#tar zxf ngx_cache_purge-2.3.tar.gz

#tar zxf master.tar.gz

# cd nginx-1.10.2/

[root@www nginx-1.10.2]# ./configure --prefix=/usr/local/nginx1.10 --user=www --group=www --with-http_stub_status_module --with-http_realip_module --with- http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi- temp-path=/var/tmp/nginx/fcgi --with-pcre --add-module=../ngx_cache_purge-2.3 --with-http_flv_module --add-module=../nginx-goodies-nginx-sticky -module-ng-08a395c66e42

[root@www nginx-1.10.2]# make && make install

Not: Nginx'in tüm modülleri derleme zamanında eklenmelidir ve çalışma zamanında dinamik olarak yüklenemez.

4. Yük dengeleme için diğer zamanlama şemaları:



Aşağıda nginx yük dengeleme modülü tarafından desteklenen diğer zamanlama algoritmalarına dair bir tanıtım bulunmaktadır:

Anketleme (varsayılan): Her istek kronolojik sırayla tek tek farklı arka uç sunucularına tahsis edilir. Bir arka uç sunucusu çökerse, hatalı sistem otomatik olarak elenir ve böylece kullanıcı erişimi etkilenmez. Weight, anketleme ağırlığını belirtir. Weight değeri ne kadar büyükse, erişim olasılığı o kadar yüksek tahsis edilir. Esas olarak arka uçtaki her sunucunun performansının eşit olmadığı durumlarda kullanılır.

ip_hash: Her istek erişim IP'sinin hash sonucuna göre tahsis edilir, böylece aynı IP'den gelen ziyaretçiler bir arka uç sunucusuna erişebilir; bu, dinamik web sayfalarındaki oturum paylaşımı sorununu etkili bir şekilde çözer. Elbette bu düğüm kullanılamaz durumdaysa bir sonraki düğüme gönderilir ve o sırada oturum senkronizasyonu yoksa oturum kapatılır.

least_conn: İstek, o anda en az aktif bağlantıya sahip olan gerçek sunucuya gönderilir. Weight değeri dikkate alınacaktır.

url_hash: Bu yöntem istekleri url erişiminin hash sonucuna göre tahsis eder, böylece her url aynı arka uç sunucusuna yönlendirilir; bu, arka uç önbellek sunucusunun verimliliğini daha da artırabilir. Nginx kendisi url_hash'i desteklemez. Bu zamanlama algoritmasını kullanmanız gerekiyorsa Nginx hash paketi nginx_upstream_hash'i kurmalısınız.

fair: Bu, yukarıdaki ikisinden daha akıllı bir yük dengeleme algoritmasıdır. Bu algoritma sayfa boyutuna ve yükleme süresine göre akıllıca yük dengeleme yapabilir; yani istekleri arka uç sunucusunun yanıt süresine göre tahsis eder ve yanıt süresi kısa olanlara öncelik verir. Nginx kendisi fair'i desteklemez. Bu zamanlama algoritmasını kullanmanız gerekiyorsa Nginx'in upstream_fair modülünü indirmelisiniz.

5. Yük dengeleme ve sağlık kontrolü:

Tam anlamıyla nginx, yük dengeleme arka uç düğümleri için bir sağlık kontrolüne sahip değildir ancak bu, varsayılan ngx_http_proxy_module modülü ve ngx_http_upstream_module modülündeki ilgili yönergelerle tamamlanabilir. Arka uç düğümü başarısız olduğunda, erişim sağlamak için otomatik olarak bir sonraki düğüme geçecektir.

weight: Anketleme ağırlığı ip_hash'te de kullanılabilir, varsayılan değer 1'dir

max_fails: İsteklerin başarısız olmasına izin verilen sayı, varsayılan olarak 1'dir. Maksimum sayı aşıldığında proxy_next_upstream modülü tarafından tanımlanan bir hata döndürülür.

fail_timeout: İki anlama gelir; biri 10 saniye içinde en fazla 2 hataya izin verilmesidir; diğeri ise 2 hatadan sonra 10 saniye boyunca bu sunucuya istek tahsis edilmemesidir.

6. Nginx vekil önbellek kullanımı:

Önbellekleme, js, css, görüntü ve diğer statik dosyaları arka uç sunucusundan nginx tarafından belirtilen önbellek dizinine kaydetmektir; bu sadece arka uç sunucusunun yükünü azaltmakla kalmaz, aynı zamanda erişim hızını da artırır. Ancak önbelleği zamanında temizlemek bir sorun haline gelir; bu nedenle son kullanma tarihinden önce önbelleği manuel olarak temizlemek için ngx_cache_purge modülüne ihtiyaç duyulur.

Proxy modülünde yaygın olarak kullanılan yönergeler proxy_pass ve proxy_cache'dir.

Nginx'in web önbellekleme işlevi esas olarak proxy_cache, fastcgi_cache komut kümesi ve ilgili komut kümeleri tarafından tamamlanır. proxy_cache yönergesi arka uç sunucusunun ters vekil önbellek statik içeriğinden sorumludur ve fastcgi_cache esas olarak FastCGI dinamik süreç önbelleklemesini işlemek için kullanılır.

İlgili Makaleler

Daha Fazla Özel Teklifi Keşfedin

  1. Kısa Mesaj Servisi (SMS) & E-posta Hizmeti

    50.000 e-posta paketi 1,99 USD'den başlayan fiyatlarla, 120 kısa mesaj ise sadece 1,00 USD'den başlar.

phone Bize Ulaşın
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.