nginx ücretsiz, açık kaynaklı, yüksek performanslı bir HTTP sunucusu ve ters proxy sunucusudur; aynı zamanda bir IMAP, POP3, SMTP proxy sunucusudur; nginx web sitesi yayınlama işlemi için bir HTTP sunucusu olarak kullanılabilir ve nginx bunun tersi olarak kullanılabilir Proxy, yük dengeleme uygular.
İşte kısaca nginx'i tanıtmak için başlıca üç husus
1. Ters proxy
Temsilci hakkında
Ajans söz konusu olduğunda, önce bir kavramı açıklığa kavuşturmalıyız, sözde ajans bir temsilci ve bir kanaldır;
Şu anda, iki rol tasarlanmıştır, biri delege edilmiş rol ve diğeri hedef roldür. Temsil edilen rolün, bu aracı aracılığıyla bazı görevleri tamamlamak için hedef role erişme sürecine aracı işlem süreci denir; yaşamdaki özel bir mağaza gibi ~ adidas'a misafir Özel mağazadan bir çift ayakkabı satın aldım. Bu özel mağaza temsilcidir. Temsilci rolü adidas üreticisidir ve hedef rol kullanıcıdır.
görüntü
Yönlendirme vekili
Ters proxy'den bahsetmeden önce, ileri proxy'ye bir göz atalım. İleri proxy aynı zamanda herkesin en sık temas kurduğu proxy modudur. İleri proxy'nin işleme modundan, yazılım tarafından hayata iki açıdan bahsedeceğiz. İleri vekilin ne olduğunu açıklayayım
Günümüz ağ ortamında, teknik ihtiyaçlar nedeniyle bazı yabancı web sitelerini ziyaret etmemiz gerekirse, yabancı bir web sitesine bir tarayıcı aracılığıyla erişilemediğini göreceksiniz.Bu zamanda herkes bir FQ operasyonu kullanabilir. Erişim için, FQ'nun ana yöntemi yabancı web sitelerine erişebilen bir proxy sunucusu bulmak, isteği proxy sunucusuna gönderiyoruz, proxy sunucusu yabancı web sitesini ziyaret ediyor ve ardından erişilen verileri bize iletiyor!
Yukarıda bahsedilen proxy modu, ileri proxy olarak adlandırılır.İleri proxy'nin en büyük özelliği, istemcinin erişilecek sunucu adresi konusunda çok net olmasıdır; sunucu yalnızca isteğin hangi proxy sunucudan geldiğini bilir, ancak hangi belirli istemciden geldiğini bilmez; ileri proxy Mod, gerçek müşteri bilgilerini korur veya gizler.
görüntü
Ters vekil
İleriye dönük bir proxy'nin ne olduğunu anladıktan sonra, ters proxy'nin kullanımına bakmaya devam edelim. Örneğin, büyük göksel hanedanlığımın belirli bir hazine web sitesi. Web sitesine her gün aynı saatte bağlanan ziyaretçi sayısı arttı ve tek bir sunucu, insanların artan talebini karşılamaktan çok uzak. Satın alma arzusu var ve şu anda tanıdık bir terim var: dağıtılmış dağıtım; yani, ziyaretçi sayısını sınırlama sorunu birden fazla sunucu dağıtarak çözülür; bir hazine web sitesindeki işlevlerin çoğu, ters proxy uygulaması için nginx kullanılarak da doğrudan uygulanır. Evet ve nginx ve diğer bileşenleri kapsülledikten sonra uzun bir ad verilir: Tengine. İlgilenen çocuklar belirli bilgileri görüntülemek için Tengine'in resmi web sitesini ziyaret edebilir:
Peki, ters proxy dağıtılmış küme işlemlerini ne şekilde uygular? Öncelikle şematik bir diyagrama bakalım:
görüntü
Yukarıdaki diyagramdan açıkça görebilirsiniz, nginx sunucusu, sunucuya birden çok istemci tarafından gönderilen talepleri alır ve bunları belirli kurallara göre işlenmek üzere arka uç iş işleme sunucusuna dağıtır. Bu noktada ~ isteğin kaynağı istemcidir, ancak isteği hangi sunucunun işlediği açık değildir, nginx ters proxy rolünü oynar
Ters proxy, esas olarak sunucu kümelerinin dağıtılmış dağıtımı durumunda kullanılan ters proxy, sunucu bilgilerini gizler!
Proje sahnesi
Normalde, gerçek proje işlemindeyken, ileri vekil sunucu ve ters vekil bir uygulama senaryosunda mevcut olabilir. Hedef sunucuya erişim için ileri vekil vekil istemcisi isteği, hedef sunucu bir ters basit ilgi sunucusudur , Ters proxy birden çok gerçek iş işleme sunucusu. Spesifik topoloji aşağıdaki gibidir:
görüntü
2. Yük Dengeleme
Sözde proxy sunucusu kavramını daha önce netleştirdik. Sonra, nginx bir ters proxy sunucusu rolünü oynayacak.İstek dağıtımı için hangi kuralları kullanıyor? Kullanılmayan proje uygulama senaryoları için dağıtım kuralları kontrol edilebilir mi?
İstemci tarafından gönderilen ve burada bahsedilen nginx ters proxy sunucusu tarafından alınan istek sayısı, bahsettiğimiz yüktür
İstek sayısı, bir dengeleme kuralı olan belirli kurallara göre işlenmek üzere farklı sunuculara dağıtılır.
Bu nedenle sunucunun aldığı taleplerin kurallara göre dağıtılması işlemine yük dengeleme denir.
Yük dengeleme Gerçek proje operasyon sürecinde, donanım yük dengeleme ve yazılım yük dengeleme vardır.Donanım yük dengeleme, nispeten pahalı ve pahalı olan F5 yük dengeleme gibi sabit yük olarak da adlandırılır, ancak verilerin kararlılığı ve güvenliği vb. Çok iyi bir garanti var. China Mobile ve China Unicom gibi şirketler operasyon için sert yükü seçecek; daha fazla şirket maliyet nedenlerinden dolayı yazılım yük dengelemesini kullanmayı tercih edecek.Yazılım yük dengeleme, ana bilgisayar donanımı ile birlikte mevcut teknolojiyi kullanır Bir mesaj kuyruğu dağıtım mekanizması uygulanmıştır
görüntü
Nginx tarafından desteklenen yük dengeleme planlama algoritması aşağıdaki gibidir:
1. Windows kurulumu
Resmi web sitesi indirme adresi:
https://nginx.org/en/download.html
Aşağıdaki şekilde gösterildiği gibi, nginx sıkıştırılmış paketinin karşılık gelen sürümünü indirin ve onu yazılımın bilgisayarınızda depolandığı klasöre açın.
görüntü
Açma işlemi tamamlandıktan sonra, dosya dizini yapısı aşağıdaki gibidir:
görüntü
Nginx'i başlatın
1) nginx sunucusunu başlatmak için doğrudan dizindeki nginx.exe'ye çift tıklayın
2) Komut satırı bu klasöre sayılır ve nginx komutu yürütülür ve nginx sunucusu doğrudan başlatılır
D: /resp_application/nginx-1.13.5 > nginx
görüntü
Nginx'i ziyaret edin
Tarayıcıyı açın, adresi girin: http: // localhost, sayfayı ziyaret edin, ziyaretin başarılı olduğunu gösteren aşağıdaki sayfa görünür
görüntü
Nginx'i durdur
Komut satırından nginx kök dizinini girin ve sunucuyu durdurmak için aşağıdaki komutu yürütün:
Nginx sunucusunu zorla durdurun, işlenmemiş veri varsa atın
D: /resp_application/nginx-1.13.5 > nginx -s durdur
Nginx sunucusunu nazikçe durdurun, işlenmemiş veri varsa işlemin tamamlanmasını ve durmasını bekleyin
D: /resp_application/nginx-1.13.5 > nginx -s çık
görüntü
2. ubuntu kurulumu
Normal yazılım yükleme yöntemine göre, aşağıdaki komutla doğrudan kurun:
$ sudo apt-get install nginxgörüntü
Kurulum tamamlandı. / Usr / sbin / dizininde nginx komutunun bulunduğu dizin ve / etc / nginx / dizininde nginx sunucusunu ve yük dengeleme bilgilerini yapılandırmak için kullanılan tüm nginx yapılandırma dosyaları var.
Nginx işleminin başlatılıp başlatılmadığını kontrol edin
$ ps -ef | grep nginxNginx, mevcut ana bilgisayarın CPU'sunun çekirdek sayısına göre karşılık gelen işlem sayısını otomatik olarak oluşturacaktır (mevcut ubuntu ana bilgisayarı 2 çekirdekli 4 iş parçacıklı bir yapılandırmaya sahiptir)
görüntü
Açıklamalar: Burada başlatılan hizmet süreçleri aslında 4 işlemdir, çünkü nginx süreci başladığında, resmi sürecin anormal bir şekilde sonlandırılmasını önlemek için bir arka plan programı eşlik edecektir; nginx kalıtımı sona erdikten sonra daemon geri dönerse, İşlemi otomatik olarak yeniden başlatın.
Arka plan programı süreci genellikle ana süreç olarak adlandırılır ve iş süreci işçi süreci olarak adlandırılır.
Nginx server komutunu başlatın
Nginx'in doğrudan yürütülmesi, sunucuyu varsayılan yapılandırma dosyasına göre başlatacaktır.
$ nginxgörüntü
Nginx servis komutunu durdur
Windows sisteminin yürütme süreci ile aynı, iki durdurma yöntemi
$ nginx -s stop veya $ nginx -s çıkıngörüntü
Yüklemeyi yeniden başlat
Ayrıca nginx'i yeniden başlatmak veya dosyaları yeniden yüklemek için yeniden aç ve yeniden yükle komutlarını da kullanabilirsiniz.
3. mac os kurulumu
Nginx'i doğrudan brew aracılığıyla kurabilir veya tar.gz sıkıştırılmış paketini indirebilirsiniz.
Doğrudan demleme yoluyla yükleyin
demlemek nginx yüklemekKurulum tamamlandıktan sonra, sonraki komut işlemleri, sunucu başlatma, işlem görünümü, sunucuyu durdurma, sunucuyu yeniden başlatma ve dosya yükleme komutlarının tümü tutarlıdır.
Nginx, çok güçlü bir web sunucusuna ek olarak bir ters proxy sunucusunun yanı sıra bir posta sunucusu vb.
Proje kullanımında en çok kullanılan üç temel işlev ters proxy, yük dengeleme ve statik sunucudur.
Bu üç farklı işlevin kullanımı, nginx'in yapılandırmasıyla yakından ilgilidir. Nginx sunucusunun yapılandırma bilgileri esas olarak nginx.conf yapılandırma dosyasında yoğunlaşmıştır ve tüm yapılandırılabilir seçenekler kabaca aşağıdaki bölümlere ayrılmıştır.
ana # Global yapılandırma olaylar {# nginx çalışma modu yapılandırması } http {# http ayarları .... sunucu {# Sunucu ana bilgisayar yapılandırması .... konum {# Yönlendirme yapılandırması .... } konum yolu { .... } konum diğer yol { .... } } server { .... yer { .... } } yukarı akış adı {# Yük dengeleme yapılandırması .... } }Yukarıdaki yapılandırma dosyasında gösterildiği gibi, esas olarak 6 bölümden oluşur:
ana modül
Aşağıdaki yapılandırma kodunu inceleyin
# kullanıcı, kimse, hiç kimse; işçi_işlemleri 2; # error_log günlükleri / error.log # error_log günlükleri / error.log bildirimi # error_log günlükleri / error.log bilgileri # pid günlükleri / nginx.pid worker_rlimit_nofile 1024;Yukarıdaki konfigürasyonlar, ana global konfigürasyon modülünde saklanan tüm konfigürasyon öğeleridir.
olay modülü
Kuru ürünler
Etkinlik { işçi_bağlantıları 1024; multi_accept on; epoll kullanın; }Yukarıdaki yapılandırma, nginx sunucusunun çalışma modunun bazı işlem yapılandırması içindir.
http modülü
Bir web sunucusu olarak http modülü nginx'in temel modülüdür ve birçok yapılandırma öğesi vardır. Donanım bilgilerine göre uygun şekilde yapılandırılması gereken birçok gerçek iş senaryosu projede ayarlanacaktır. Normal koşullar altında, varsayılan yapılandırmayı kullanın. !
http { ## # Temel yapılandırma ## dosya gönder; tcp_nopush açık; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens kapalı; # server_names_hash_bucket_size 64; # server_name_in_redirect off; /etc/nginx/mime.types dahil; default_type uygulaması / sekizli akışı; ## # SSL sertifika yapılandırması ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv3 düşüyor, ref: POODLE ssl_prefer_server_ciphers açık; ## # Günlük yapılandırması ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip sıkıştırma yapılandırması ## gzip açık; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied herhangi biri; # gzip_comp_level 6; # gzip_buffers 168k; # gzip_http_version 1.1; # gzip_types metin / düz metin / css uygulaması / json uygulaması / javascript text / xml application / xml application / xml + rss text / javascript; ## # Sanal ana bilgisayar yapılandırması ## /etc/nginx/conf.d/*.conf dahil; dahil / etc / nginx / sites-etkin / *;sunucu modülü
Srever modül yapılandırması, bir sanal sunucunun yapılandırma bilgileri olan bir sanal erişim ana bilgisayarını tanımlamak için kullanılan http modülündeki bir alt modüldür.
server { 80 dinle; server_name localhost 192.168.1.100; kök / nginx / www; index index.php index.html index.html; karakter kümesi utf-8; access_log günlükleri / access.log; error_log günlükleri / error.log; ... }Temel yapılandırma bilgileri aşağıdaki gibidir:
konum modülü
Konum modülü, nginx yapılandırmasındaki en yaygın yapılandırmadır ve esas olarak yönlendirme erişim bilgilerini yapılandırmak için kullanılır
Yönlendirme erişim bilgisi yapılandırmasında ters proxy, yük dengeleme vb. Gibi çeşitli işlevlerle ilişkilendirilir, bu nedenle konum modülü de çok önemli bir yapılandırma modülüdür.
temel yapılandırma
yer / { kök / nginx / www; index index.php index.html index.htm; }location /: kök dizine eşleşen erişimi gösterir
root: Kök dizine erişirken sanal konağın web dizinini belirtmek için kullanılır
dizin: Belirli bir kaynak belirtilmediğinde varsayılan olarak görüntülenen kaynak dosyalarının listesi
Ters proxy yapılandırması
İstemci erişimini şeffaf hale getirmek için proxy_set yapılandırması aracılığıyla ters proxy proxy sunucu erişim modu aracılığıyla
yer / { proxy_pass http: // localhost: 8888; proxy_set_header X-gerçek-ip $ remote_addr; proxy_set_header Ana Bilgisayar $ http_host; }uwsgi yapılandırması
Wsgi modunda sunucu yapılandırması erişim modu
yer / { uwsgi_params dahil; uwsgi_pass localhost: 8888 }yukarı akış modülü
Yukarı akış modülü temel olarak yük dengelemenin yapılandırılmasından sorumludur ve istekleri varsayılan döngüsel zamanlama yöntemi aracılığıyla arka uç sunucusuna dağıtır
Basit konfigürasyon aşağıdaki gibidir
yukarı akış adı { ip_hash; sunucu 192.168.1.100:8000; sunucu 192.168.1.100:8001 kapalı; sunucu 192.168.1.100:8002 max_fails = 3; sunucu 192.168.1.100:8003 fail_timeout = 20s; sunucu 192.168.1.100:8004 max_fails = 3 fail_timeout = 20s; }Temel yapılandırma bilgileri aşağıdaki gibidir
Yük dengeleme aynı zamanda Nginx'in yaygın olarak kullanılan bir işlevidir.Yük dengeleme, iş görevlerini birlikte tamamlamak için Web sunucuları, FTP sunucuları, kurumsal anahtar uygulama sunucuları ve diğer kritik görev sunucuları gibi yürütme için birden fazla işlem birimine dağıtma anlamına gelir. Basitçe ifade etmek gerekirse, 2 veya daha fazla sunucu olduğunda, istekler kurallara göre işlenmek üzere belirlenen sunuculara rastgele dağıtılır Yük dengeleme yapılandırmasının genellikle aynı anda ters proxy yapılandırması ve ters proxy aracılığıyla yük dengelemeye atlaması gerekir. Nginx şu anda 3 yük dengeleme stratejisini ve yaygın olarak kullanılan 2 üçüncü taraf stratejisini desteklemektedir.
1. RR (varsayılan)
Her istek, farklı arka uç sunuculara tek tek kronolojik sırayla atanır.Arka uç sunucu çalışmıyorsa otomatik olarak ortadan kaldırılabilir.
Basit konfigürasyon:
görüntü
Yük dengelemenin temel kodu:
görüntü
Burada iki sunucu yapılandırdım tabii ki, bu aslında bir, ancak bağlantı noktası farklı ve 8081 sunucusu mevcut değil, bu da erişilemeyeceği anlamına geliyor, ancak http: // localhost'u ziyaret ettiğimizde değil Bir sorun varsa, varsayılan olarak http: // localhost: 8080'e atlayacaktır. Bunun nedeni, Nginx'in sunucunun durumunu otomatik olarak belirleyeceğidir. Sunucu erişilemezse (sunucu kapatılmışsa), bu sunucuya atlamayacaktır. Bir sunucunun askıda kaldığı ve kullanımı etkilediği durumdan kaçınmak için, çünkü Nginx varsayılan olarak RR stratejisine sahiptir, başka ayarlara ihtiyacımız yoktur.
2. Ağırlık
Yoklama olasılığını belirtin, ağırlık erişim oranıyla orantılıdır ve düzensiz arka uç sunucu performansı durumunda kullanılır.
Örneğin:
görüntü
Ardından 10 defa, 8081'i sadece 1 defa, 8080'i ise 9 defa ziyaret edilecek.
3. ip_hash
Yukarıdaki iki yöntemin bir sorunu var, yani bir sonraki istek geldiğinde istek başka bir sunucuya dağıtılabilir.Programımız durumsuz olmadığında (verileri kaydetmek için oturum kullanmak), şu anda büyük bir sorun var. Bu çok sorunlu.Örneğin, oturumdaki oturum açma bilgilerini kaydederseniz, başka bir sunucuya atladığınızda tekrar oturum açmanız gerekir.Çoğu kez yalnızca bir sunucuya erişmek için bir istemciye ihtiyaç duyarız, o zaman iphash, iphash kullanmamız gerekir. Her istek, erişim ipinin karma sonucuna göre tahsis edilir, böylece her ziyaretçi, oturum problemini çözebilecek bir arka uç sunucusuna sabit erişime sahip olur.
görüntü
4. Adil (üçüncü şahıs)
İstek, arka uç sunucusunun yanıt süresine göre tahsis edilir ve kısa yanıt süresine öncelik verilir.
görüntü
5. url_hash (üçüncü taraf)
İstekleri, ziyaret edilen URL'nin karma sonucuna göre dağıtın, böylece her URL aynı arka uç sunucusuna yönlendirilir ve bu, arka uç sunucusu önbelleğe alındığında daha etkilidir. Yukarı akışta bir karma deyimi ekleyin ve ağırlık gibi diğer parametreler sunucu deyiminde yazılamaz. Hash_method, kullanılan karma algoritmadır.
görüntü
Yukarıdaki beş yük dengeleme türü farklı durumlar için geçerlidir, bu nedenle gerçek duruma göre hangi strateji modunu kullanacağınızı seçebilirsiniz. Bununla birlikte, kullanabilmek için fair ve url_hash'in üçüncü taraf modüllerle yüklenmesi gerekir. Bu makale esas olarak Nginx'in neler yapabileceğini tanıttığından, Nginx kurulum bölümü Üçlü modül bu makalede tanıtılmayacaktır.
Nginx'in kendisi de statik bir kaynak sunucudur.Sadece statik kaynaklar olduğunda Nginx'i sunucu olarak kullanabilirsiniz.Aynı zamanda çok statiktir.Nginx üzerinden gerçekleştirilebilir.Önce statik kaynak sunucu olarak Nginx'e bakalım.
görüntü
Bu şekilde, http: // localhost'u ziyaret ederseniz, varsayılan olarak Disk E'nin wwwroot dizini altındaki index.html'ye erişirsiniz.Bir web sitesi sadece statik bir sayfaysa, dağıtım bu şekilde gerçekleştirilebilir.
Dinamik ve statik ayırma, dinamik web sitelerindeki dinamik web sayfalarının, sürekli kaynakları belirli kurallara göre sürekli değişen kaynaklardan ayırt etmesine izin vermektir.Dinamik ve statik kaynaklar bölündükten sonra, bunları statik kaynakların özelliklerine göre önbelleğe alabiliriz. Bu, statik web sitesi işlemenin temel fikridir.
görüntü
Bu şekilde, wwwroot dizinine HTML, pictures, css ve js koyabiliriz, tomcat ise yalnızca jsp ve isteklerin işlenmesinden sorumludur.Örneğin, sonekimiz gif olduğunda, Nginx varsayılan olarak şu anda talep edilen dinamik görüntü dosyasını wwwroot'tan alır. Elbette buradaki statik dosyalar Nginx ile aynı sunucuda. Ters proxy ve yük dengeleme yapılandırmasını başka bir sunucuda da kullanabiliriz.En temel işlemi bulduğumuz sürece birçok yapılandırma çok basittir. Yukarı. Ek olarak, yerelleştirme aslında normal bir ifadedir, bu nedenle çok esnektir.
Forward proxy, istemci ile kaynak sunucu arasında bulunan bir sunucu anlamına gelir. Kaynak sunucudan içerik elde etmek için, istemci proxy'ye bir istek gönderir ve hedefi (kaynak sunucu) belirtir ve ardından proxy bunu kaynak sunucuya iletir. Elde edilen içeriği müşteriye isteyin ve iade edin. Sunucunuzu proxy sunucusu olarak kullanmanız gerektiğinde, ileri proxy'yi uygulamak için Nginx'i kullanabilirsiniz, ancak şu anda Nginx'in bir sorunu var, yani HTTPS'yi desteklemiyor. HTTPS ileri proxy'yi yapılandırmak için Baidu'm olmasına rağmen, ancak sonuna kadar Yine de bir temsilci olarak hareket edemediğimi fark ettim. Elbette, yanlış yapılandırmış olabilirim, bu yüzden doğru yöntemi bilen yoldaşların açıklamak için bir mesaj bırakacağını umuyorum.
görüntü
Çözümleyici, iletme proxy'sini yapılandıran DNS sunucusudur ve listen, iletme proxy'sinin bağlantı noktasıdır Yapılandırıldıktan sonra, IE veya diğer proxy eklentilerinde proxy yapmak için sunucu ip + bağlantı noktası numarasını kullanabilirsiniz.
Yazar: Shizherusi Xiangxi
Bağlantı: https://www.jianshu.com/p/3ca785008a20