Nginx'in temel kavramlarını anlayın

Önsöz

Bu makale Nginx'i öğrenmem için bazı notlar, ana içerik Nginx'i anlamak için gereken bazı temel kavramları anlatıyor.

Ardından, Nginx'in modüler organizasyon yapısının yanı sıra her modül tarafından sağlanan sınıflandırmayı, çalışma yöntemlerini, sorumlulukları ve ilgili talimatları tartışın.

Esas olarak aşağıdaki amaçlara ulaşın:

  • Nginx'in genel çalışma prensibini anlayın
  • Nginx'in temel kavramlarını anlayın
  • Resmi belgeleri nasıl okuyacağınızı bilin.
  • Nginx hakkında

    Nginx, proxy HTTP, HTTPS ve postayla ilişkili (SMTP, POP3, IMAP) protokol bağlantılarını tersine çevirebilen performans odaklı bir HTTP sunucusudur. Ve yük dengeleme ve HTTP önbelleğe alma sağlar.

    Tasarımı, eşzamansız olay modelini tam olarak kullanır, bağlam planlamasının ek yükünü azaltır ve sunucunun eşzamanlılığını iyileştirir.

    Modüler tasarım benimsenmiştir ve bol miktarda modül içeren üçüncü taraf modülleri sağlanmaktadır.

    Dolayısıyla Nginx hakkında şu etiketler vardır: "eşzamansız" "olay" "modülerlik" "yüksek performans" "yüksek eşzamanlılık" "ters proxy" "yük dengeleme"

    temel kavram

    İşlem modeli

    Nginx süreci klasik "Master-Worker" modelini kullanır.

    Nginx başlatıldıktan sonra, bir ana süreç ve birden çok çalışan süreç olacaktır.

    Ana süreç esas olarak çalışan sürecini yönetmek için kullanılır: dış dünyadan sinyal alma, her çalışan işleme sinyal gönderme, çalışan işlemin çalışma durumunu izleme ve çalışan işlem çıktığı zaman (anormal koşullar altında) yeni çalışan süreci otomatik olarak yeniden başlatma .

    Çalışan süreci esas olarak temel ağ olaylarıyla ilgilenir. Birden çok çalışan süreci eşler arasıdır. İstemcilerden gelen talepler için eşit olarak rekabet ederler ve her süreç birbirinden bağımsızdır. Her İşçinin yalnızca "tek iş parçacığı" olarak adlandırılan ana iş parçacığına sahip olduğuna dikkat edilmelidir.

    Bir istek yalnızca bir çalışan işlemde işlenebilir ve bir çalışan işlem diğer işlemlerden gelen istekleri işleyemez.

    Çalışan işlemlerin sayısı ayarlanabilir ve genellikle makine CPU çekirdeklerinin sayısıyla tutarlı olacak şekilde ayarlanır.Bunun nedeni nginx işlem modeli ve olay işleme modelinden ayrılamaz. Çok çekirdekli özelliklerin daha iyi kullanılması için nginx, cpu affinitesi için bir bağlama seçeneği sunar.Belirli bir işlemi belirli bir çekirdeğe bağlayabiliriz, böylece işlem değiştirme nedeniyle önbellek geçersiz hale gelmez. Daha fazla işçi yalnızca işlemlerin cpu kaynakları için rekabet etmesine neden olacaktır.

    Nginx süreç model.png

    Olay modeli

    Nginx, olayları "eşzamansız, engellemesiz" bir şekilde uygular.

    Eşzamansız ve eşzamansız, engelleyen ve engellemeyen iki farklı kavramdır. Birincisi uygulamalar için daha çok, ikincisi daha çok CPU'lar içindir:

  • Eşzamansız: Bir eylemi gerçekleştirdikten sonra diğer işlemleri gerçekleştirebilir ve ardından bildirimin geri gelmesini bekleyebilir ve henüz tamamlanmamış olan işlemi gerçekleştirebilirsiniz.
  • Eşzamansız (eşzamanlı): Bir işlem gerçekleştirdikten sonra, aşağıdaki işlemi gerçekleştirmeye devam etmeden önce sonucu bekleyin.
  • Engelleme: Görevi CPU'ya ilettikten sonra, CPU'nun işlemeyi bitirmesini bekliyor (G / Ç üretilse bile) ve ardından aşağıdaki işlemleri gerçekleştiriyor.
  • Engellemesiz: Görevi CPU'ya ilettikten sonra, sonraki işlemleri işlemeye devam edin ve ardından önceki işlemin belirli bir süre sonra tamamlanıp tamamlanmadığını sorun. Bu sürece "anket" de denir
  • Nginx'in "asenkron engellemesiz" yöntemi, sistem çağrıları söz konusu olduğunda, select / poll / epoll / kqueue gibi bir sistem çağrısıdır. Aynı anda birden fazla olayı izlemenizi sağlayan bir mekanizma sağlarlar.Onları çağırmak engellemektir, ancak bir zaman aşımı belirleyebilirsiniz.Zaman aşımı süresi içinde, bir olay hazırsa geri dönün.

    Epoll, Linux'ta olayların uygulanmasıdır ve kqueue, OpenBSD veya FreeBSD işletim sistemlerindeki epoll'e benzer bir olay modelidir.

    Bu yüzden epoll modelini açıklamaya odaklanın:

    epoll event model.png

    Bu çözüm, Linux altındaki en verimli I / O olay bildirim mekanizmasıdır. Sorguya girerken I / O olayı kontrol edilmezse, olay onu uyandırana kadar uyku moduna geçecektir. Aslında, sorguları çapraz çevirmek yerine olay bildirimi ve geri aramaların yürütülmesi yöntemini kullanır, bu nedenle CPU'yu boşa harcamaz ve daha yüksek yürütme verimliliğine sahiptir.

    Ters vekil

    "Ters proxy" yi anlamak için önce "proxy sunucusu" ve "ileri proxy" nin ne olduğunu bilmeniz gerekir.

    Proxy sunucu

    Ağda, istemci sunucudan kaynakları almak için bir istek başlatır. Aralarında doğrudan bir kanal kurulmaz, ancak proxy sunucusu tarafından iletilir.

    Proxy sunucusu, İnternet üzerinden elde edilen kaynakları ilgili istemcilere döndürmek için ağda bir ortam görevi görür.

    Genellikle bahsettiğimiz proxy, genellikle istemciye göre olan "ileri proxy" yi ifade eder.

    Örneğin, bir VPN'e bağlandım. Google'ı ziyaret ettiğimde, istemci isteği VPN'e başlattı. VPN, isteğin Google'ın sunucusuna iletilmesine yardımcı oldu ve ardından Google yanıtını istemciye geri verdi. Bu süreçte VPN, "ileri proxy sunucusu" olarak hareket eder.

    Proxy server.png

    Ters vekil

    "İleri proxy" nin aksine, "ters proxy" terimi sunucu tarafına yöneliktir. Proxy sunucusuna bir istemci talebi gelir ve proxy sunucusu, istemcinin isteğine göre isteği farklı sunuculara iletir. Bu süreçte "yük dengeleme" de iki özdeş istek de gerçekleşecek ve bunlar tamamen farklı Sunucudaki durum.

    "Ters proxy", "yük dengeleme" nin gerçekleştirilmesi için ön koşuldur. Bunun nedeni, proxy sunucunun istekleri çözme ve istekleri dağıtma yeteneğine sahip olmasıdır, yük dengeleme sağlanabilir ve her sunucu üzerindeki yük azaltılabilir.

    Yük dengelemeye ek olarak "ters proxy" kullanarak, SSL şifreleme, statik içerik önbelleğe alma, gzip sıkıştırma, yavaş yükleme, güvenlik vb. Gibi işlevleri de gerçekleştirebilirsiniz.

    Ters proxy.png

    Yük dengeleme

    Yük dengeleme, kaynak kullanımını optimize etmek, verimi en üst düzeye çıkarmak, yanıt süresini en aza indirmek ve aynı zamanda aşırı yüklenmeyi önlemek için yükü birden çok sunucu arasında dağıtmak için kullanılan bir bilgisayar ağı teknolojisidir.

    Tek bir bileşen yerine yük dengelemeli birden çok sunucu bileşeni kullanmak, artıklık yoluyla güvenilirliği artırabilir. Yük dengeleme hizmetinin gerçekleştirilmesi yazılım ve donanım aracılığıyla gerçekleştirilebilir.

    Yük dengeleme dağıtımında, dağıtım sorununu çözmek için genellikle birden fazla algoritma seti vardır.

    Bağ

    Nginx'te bağlantı, bağlı soketi, okuma olayını ve yazma olayını içeren bir tcp bağlantısının kapsüllenmesidir. Nginx tarafından kapsüllenen bağlantı ile, bağlantı kurmak, veri göndermek ve almak gibi bağlantı ile ilgili şeyleri idare etmek için nginx'i kolayca kullanabiliriz.

    Http isteklerinin nginx'te işlenmesi bağlantıya dayalıdır, bu nedenle nginx sadece bir web sunucusu olarak değil, aynı zamanda bir posta sunucusu olarak da kullanılabilir.

    Elbette, nginx tarafından sağlanan bağlantıyı kullanarak, herhangi bir arka uç hizmetiyle başa çıkabiliriz.

    Maksimum bağlantı sayısı

    Nginx'te, her işlem, sistemin fd üzerindeki sınırından farklı bir maksimum bağlantı sayısı üst sınırına sahiptir.

    İşletim sisteminde ulimit -n aracılığıyla, bir işlemin açabileceği maksimum fd sayısını, yani nofile'ı elde edebiliriz, çünkü her soket bağlantısı bir fd kaplayacaktır, bu da işlemimizin maksimum bağlantı sayısını sınırlayacaktır. Elbette, programımızın destekleyebileceği maksimum eşzamanlılık sayısını da doğrudan etkileyecektir. Fd kullanıldığında, soket yeniden oluşturulduğunda başarısız olacaktır.

    Nginx, worker_connectons ayarlayarak her işlem tarafından desteklenen maksimum bağlantı sayısını belirler. Değer nofile'dan büyükse, gerçek maksimum bağlantı sayısı sıfırdır ve nginx sizi uyaracaktır.

    Nginx uygulandığında, bir bağlantı havuzu aracılığıyla yönetilir.Her çalışan işlemin bağımsız bir bağlantı havuzu vardır.Bağlantı havuzunun boyutu işçi_ağlantılarıdır. Buradaki bağlantı havuzu aslında gerçek bir bağlantı değildir, sadece worker_connections boyutuna sahip bir ngx_connection_t yapısı dizisidir. Buna ek olarak, nginx tüm ücretsiz ngx_connection_t'yi bağlı bir free_connections listesi aracılığıyla kaydeder.Bir bağlantı her elde edildiğinde, ücretsiz bağlantı listesinden bir tane alır ve kullanıldıktan sonra serbest bağlantı listesine geri koyar.

    Bu nedenle, nginx'in kurabileceği maksimum bağlantı sayısı: worker_connections * worker_processes,

    Eğer nginx bir ters proxy olarak kullanılıyorsa, nginx'in bir istemci ve sunucu isteği oluşturması gerektiğinden, maksimum bağlantı sayısı şudur: worker_connections * worker_processes / 2

    Talep İste

    Nginx'te http talebine atıfta bulunuruz ve nginx'teki veri yapısı ngx_http_request_t'dir.

    Bir http talebinin kapsüllenmesidir, nginx, ngx_http_request_t aracılığıyla analiz isteği ve çıktı yanıtı ile ilgili verileri kaydeder.

    Bir http isteği, istek satırı, istek başlığı, istek gövdesi, yanıt satırı, yanıt başlığı ve yanıt gövdesini içerir.

    Genel ağ talebi işleme süreci şu şekildedir:

  • Müşteri bir istek gönderecektir.
  • Daha sonra bir satır veri okur ve istek satırında bulunan yöntem, uri ve http_version bilgilerini analiz ederiz.
  • Ardından istek başlığını satır satır işleyin ve istek yöntemine ve istek başlık bilgisine göre bir istek gövdesi olup olmadığını ve istek gövdesinin uzunluğunu belirleyin ve ardından istek gövdesini okuyun.
  • Talebi aldıktan sonra, çıktısı alınması gereken veriyi oluşturma talebini işler ve ardından yanıt satırı, yanıt başlığı ve yanıt gövdesini oluştururuz.
  • Yanıtı müşteriye gönderdikten sonra, eksiksiz bir talep işlenir.
  • Nginx'in isteği işlerken bazı küçük farklılıkları vardır.Örneğin, istek başlığı okunduğunda, isteği işlemeye başlar.

    Nginx işleme istek süreci

    Nginx'in bir isteği işlemesinin soyut kavramsal süreci:

  • istek isteği gelir
  • HTTP İsteğini başlatın, HTTP İsteği nesnesi oluşturun
  • İstek başlığı işleniyor
  • İşleme isteği gövdesi
  • Bu istekle ilişkili işleyiciyi arayın (URL'nize veya Konum yapılandırmanıza göre)
  • İşlem için sırayla her aşama işleyicisini çağırın
  • Konum yapılandırmasını alın
  • Uygun bir yanıt üretin
  • Yanıt başlığını gönder
  • Yanıt gövdesi gönder
  • Temel veri yapısı

    Ekstrem verimlilik arayışında, nginx'in yazarı birçok farklı nginx tarzı veri yapısı ve genel işlev gerçekleştirdi. Örneğin nginx, uzunluklu dizge, derleyici seçeneklerine vb. Göre optimize edilmiş dize kopyalama işlevi ngx_copy sağlar.

    ps: Altı çizili bölme, C dilinin değişken adı stilidir

    Veri Yapısı Açıklaması ngx_str_t dize kapsülleme ngx_pool_t, bir dizi kaynağı (bellek, dosyalar) yönetmeye yardımcı olacak bir mekanizma sağlar ngx_array_t dizi yapısı ngx_chain_t, esas olarak modüller arasındaki bağlantılı veri aktarım listesinin gerçekleştirilmesi için kullanılır ngx_buf_t, ngx_chain_t bağlantılı listenin her düğümünün gerçek uygulamasıdır , Bazı özel veriler adına. Ngx_list_t liste veri yapısının uygulanması ve ngx_queue_t tarafından uygulanan çift bağlantılı liste ngx_hash_t'nin uygulanması ngx_hash_wildcard_t Karma tablosu uygulaması ngx_combinded_t, üç tür karma tablosu içeren uygun bir kap sağlamaktır ngx_hash_t_keys_ Diğer hash türleri oluşturmak için yardımcı sınıf yapılandırması

    Nginx'in konfigürasyon sistemi, bir ana konfigürasyon dosyası ve diğer bazı yardımcı konfigürasyon dosyalarından oluşur. Bu yapılandırma dosyalarının tümü, tümü nginx kurulum dizininin altındaki conf dizininde bulunan düz metin dosyalarıdır.

    Talimatlar, nginx'in çeşitli modülleri tarafından sağlanır ve farklı modüller, yapılandırmayı uygulamak için farklı talimatlar sağlar.

    Anahtar-Değer komutlarının biçimine ek olarak, kapsam komutları da vardır.

    Nginx.conf dosyasındaki yapılandırma bilgileri, birden çok kapsama bölünmüş veya yapılandırma talimatı bağlamı olarak adlandırılan mantıksal anlamına göre sınıflandırılır. Farklı kapsamlar, bir veya daha fazla yapılandırma öğesi içerir.

    Aşağıdaki bağlam talimatları daha çok kullanılır:

    Yönerge Açıklaması Yönergeyi içerir main Belirli iş işlevleriyle (örneğin, http hizmeti veya e-posta hizmeti proxy'si) hiçbir ilgisi olmayan, çalışan işlemlerinin sayısı, çalışan kimlik vb. Gibi nginx çalışırken bazı parametreler. user, worker_processes, error_log, events, http, mail http http hizmetlerinin sağlanmasıyla ilgili bazı yapılandırma parametreleri. Örneğin: canlı tutmanın kullanılıp kullanılmayacağı, sıkıştırma için gzip kullanılıp kullanılmayacağı vb. Sunucu sunucusu http hizmeti birkaç sanal konağı destekler. Her sanal konağın, sanal konağa ilişkin yapılandırmayı içeren karşılık gelen bir sunucu yapılandırma öğesi vardır. Posta hizmeti için bir proxy sağlarken, birkaç sunucu da kurulabilir.Her sunucu, dinleme adresi ile ayırt edilir. dinleme, sunucu_adı, erişim_günlüğü, konum, protokol, proxy, smtp_auth, xclient konumu http hizmetinde, belirli belirli URL'lere karşılık gelen bir dizi yapılandırma öğesi. dizin, kök posta E-posta ile ilgili SMTP / IMAP / POP3 proxy uygularken paylaşılan bazı yapılandırma öğeleri (çünkü birden çok proxy uygulamak ve birden çok dinleme adresinde çalışmak mümkündür). sunucu, http, imap_capabilities modülü

    Nginx, çeşitli fonksiyonel modülleri bir zincir halinde organize eder.Bir talep geldiğinde, istek, işlenmek üzere bu zincirdeki modüllerin bir kısmı veya tamamı üzerinden geçer. Her modül belirli bir işlevi yerine getirir. Örneğin, isteklerin sıkıştırmasının açılmasını uygulayan bir modül, SSI uygulayan bir modül, yukarı akış sunucusu ile iletişimi uygulayan bir modül ve FastCGI hizmetleriyle iletişimi uygulayan bir modül.

    Üç tür modül vardır:

  • Çekirdek modülü
  • Yardımcı modül
  • Üçüncü taraf modülü
  • Resmi belge düzenine göre, yardımcı modüller de aşağıdaki kategorilere ayrılmıştır:

  • http
  • posta
  • Akış
  • İşlevlerine göre şu kategorilere ayrılabilir:

  • işleyici modülü
  • Bu tür bir modüle doğrudan eylemci modülü de denir. Temel olarak, istemcinin statik sayfa talebini işlemekten ve karşılık gelen disk dosyasını yanıt içeriği çıktısı olarak hazırlamaktan sorumlu olan ngx_http_static_module modülü gibi, istemci isteklerini işlemek ve yanıtlanacak içeriği oluşturmaktan sorumludur.
  • filtre modülü
  • Yanıt başlıklarını ve içeriği filtreleyen modül, yanıt başlıklarını ve içeriğini işleyebilir. İşlem süresi, yanıt içeriğinin alınmasından sonra ve yanıtı kullanıcıya göndermeden öncedir.
  • yukarı akış modülü
  • Yukarı akış modülü, ters proxy işlevini uygular, gerçek isteği arka uç sunucuya iletir, yanıtı arka uç sunucudan okur ve istemciye geri gönderir. Yukarı akış modülü özel bir işleyicidir, ancak yanıt içeriği gerçekten kendi başına üretilmez, ancak arka uç sunucudan okunur.
  • yük dengeleme modülü
  • Belirli bir algoritmayı uygulamak için yük dengeleme modülü. Birçok arka uç sunucusu arasından, belirli bir istek için yönlendirme sunucusu olarak bir sunucu seçin
  • son

    Bu makale, Nginx'in bazı temel kavramlarını açıklamaktadır.

    Nginx'in iş parçacığı modeli Master-Worker modelidir.Her işçi tek iş parçacıklıdır, yani istekleri işleme tek iş parçacıklıdır. Tek iş parçacıklı eşzamanlılık olay modeli, "eşzamansız, engellemesiz G / Ç" modelidir.

    Ayrıca, nginx'in yüksek performansla yüksek eşzamanlılık ile başa çıkabilmesinin nedenlerinden biri olan "ters proxy" ve "yük dengeleme" kavramlarını da açıklar.

    Nginx, ağ istekleri için Bağlantı ve Talep kavramlarına ve kapsüllemesine sahiptir.

    Nginx'in kaynak kodu organizasyon yapısı modülerdir.Farklı modüller farklı sorumluluklar uygular ve daha sonra büyük bir şey yapmak için birbirlerine bağlanırlar.Modül kategorilerini bilmek, resmi belgeleri nasıl bulacağımızı bize bildirebilir.

    Hangi komutların ve hangi komutların hangi işlevlere sahip olduğunu görmeden önce, nginx'in hangi işlevleri sağladığını tam olarak bilemiyorum. Sonra durun, sonra "herkes bunu düşünebilir ve gerçekleştirebilir" fikrine tutun. Nginx kullanın. Bir proxy hizmeti olarak Nginx, ortada ne istersen yapabilir.

    Eser sahibi: JC_Huang

    Bağlantı: https://www.jianshu.com/p/1648d4e936f2

    İPhone 11 görüntülemeleri yayınlandı, arkadaki üç kamera / patlama daha küçük!
    önceki
    OPPO ağlamak istiyor! Huawei'nin popülaritesi: Hepimiz "krizantemdeki insanlarız"
    Sonraki
    JKL'nin en çok istediği şampiyon cildi o! Şampiyon derisinin haberlerini ortaya çıkarmak için müdürle canlı yayın
    Xiaobai için mutlaka görülmesi gereken: Sinir Ağlarına Başlarken
    Hu Mei'nin yeni eseri "Into the Capital" 10 Mayıs'ta hazırlanıyor, Ma Yili ve Fu Dalong çarpıcı bir görüntü oluşturuyor
    Sabah Okuma Birçok ülke Boeing 737MAX8'in askıya alınmasını istedi
    Canlı yayında yeni yetenek! Haberi kırarak kızışan MVP oyuncusu, selam Theshy?
    UNDEFEATED x NIKE ortak markalı ve gizli öğeler! Air Max 97'yi satın almanın yanı sıra özel dikkat de gereklidir!
    Zotye T600 Coupe 9 Haziran'da lanse edildi ve 3 çeşit güce sahip olduğu söyleniyor.
    Nginx, gzip sıkıştırma demosunu açar
    Hammer Technology'nin Akıllı Bluetooth Araç Braketi piyasaya sürüldü, fiyatı 199 yuan
    A Shui Baolan'ın eski fotoğrafları çıkarıldı Netizenler: Lütfen A Shui Gaming Furukawa Xionghui'yi arayın!
    "Yüz kapatma" ekipmanınız yayında! Stüssy'nin yeni ortak projesi yine özel!
    "En İyi Erkek Arkadaşın Evrimi" MV Afişi Çift Basılmış Zheng Kai Fantezi Açılışı
    To Top