Nginx'in tüm sihirli işlevlerine sahip misiniz?

Nginx'e Giriş

Nginx, ücretsiz, açık kaynaklı, yüksek performanslı, hafif bir HTTP ve ters proxy sunucusunun yanı sıra daha az bellek ve güçlü eşzamanlılık ile karakterize edilen bir e-posta (IMAP / POP3) proxy sunucusudur.

Nginx bir çekirdek ve bir dizi modülden oluşur Çekirdek, ağ protokollerini etkinleştirmek, çalışan bir ortam oluşturmak, istemci isteklerini almak ve dağıtmak ve modüller arasındaki etkileşimi işlemek gibi web hizmetlerinin temel işlevlerini sağlar.

Nginx'in çeşitli işlevleri ve işlemleri modüller tarafından gerçekleştirilir. Nginx'in modülleri şunlara ayrılmıştır:

  • Çekirdek modüller: HTTP modülü, EVENT modülü ve MAIL modülü.
  • Temel modüller: HTTP Erişim modülü, HTTP FastCGI modülü, HTTP Proxy modülü ve HTTP Yeniden Yazma modülü.
  • Üçüncü taraf modülleri: HTTP Yukarı Akış İsteği Karma modülü, Bildirim modülü, HTTP Erişim Anahtarı modülü ve kullanıcı tarafından geliştirilen modüller.

Bu tasarım, Nginx'i geliştirmeyi ve genişletmeyi kolaylaştırır ve Nginx'i bu kadar güçlü kılan da tam da bu yüzden.

Nginx modülleri varsayılan olarak Nginx'te derlenir. Modül eklemeniz veya silmeniz gerekiyorsa, Nginx'i yeniden derlemeniz gerekir.Bu Apache'nin dinamik modülleri yüklemesi kadar kullanışlı değildir.

Dinamik olarak modülleri yüklemeniz gerekiyorsa, Taobao.com tarafından başlatılan, Nginx'e birçok gelişmiş özellik ekleyen ve birçok yerel web sitesi tarafından benimsenen Nginx ile tam uyumlu Web sunucusu Tengine'i kullanabilirsiniz.

Nginx'in birçok genişletilmiş sürümü vardır:

  • Açık kaynak sürümü nginx.org
  • NGINX Plus'ın ticari versiyonu
  • Taobao tarafından başlatılan bir web sunucusu olan Tengine
  • OpenResty, Nginx ve Lua tabanlı bir web platformu

Web sunucusu olarak Nginx

Web sunucusuna WWW (World Wide Web) sunucusu da denir. Ana işlevi, genellikle B / S (Tarayıcı / Sunucu) modunda çevrimiçi bilgi tarama hizmeti sağlamaktır:

  • Uygulama katmanı, HTTP protokolünü kullanır.
  • HTML belge biçimi.
  • Tarayıcı Tekdüzen Kaynak Konum Belirleyicisi (URL).

Nginx, statik sayfalar için bir web sunucusu olarak kullanılabilir ve ayrıca Perl, PHP vb. Gibi CGI protokolünün dinamik dillerini destekler, ancak Java'yı desteklemez.

Java programları genellikle Tomcat ile işbirliği yapılarak tamamlanır. Bir Java programcısı olarak, Nginx ve Tomcat arasındaki farkı anlamalısınız.

Nginx, Apache ve Tomcat:

  • Nginx: Rus programcı Igor Sysoev tarafından geliştirilmiş hafif, oldukça eşzamanlı bir HTTP sunucusu.
  • Apache HTTP Sunucusu Projesi: Apache Foundation altındaki bir HTTP hizmet projesi, Nginx'e benzer işlevlere sahiptir.
  • Apache Tomcat: Bir Uygulama Sunucusu olan Apache Vakfı altında başka bir projedir. Daha doğrusu, bir Servlet uygulama kabıdır.Apache HTTP Sunucusu ve Nginx ile karşılaştırıldığında, Tomcat dinamik olarak kaynakları oluşturabilir ve bunları istemciye geri döndürebilir.

Apache HTTP Sunucusu ve Nginx, dinamik sayfaların oluşturulmasını desteklemez, ancak diğer modüller tarafından desteklenebilir (örneğin, içeriği dinamik olarak oluşturmak için Shell, PHP, Python komut programları aracılığıyla).

Bir HTTP Sunucusu, HTTP protokol seviyesinde iletim ve erişim kontrolü ile ilgilidir, böylece Apache / Nginx üzerinde proxy, yük dengeleme ve diğer işlevleri görebilirsiniz.

İstemci, sunucuda depolanan kaynaklara (HTML dosyaları, resim dosyaları, vb.) HTTP Sunucusu aracılığıyla erişir.

CGI teknolojisi sayesinde, işlenen içerik HTTP Sunucusu aracılığıyla da dağıtılabilir, ancak bir HTTP Sunucusu her zaman sunucudaki dosyaları HTTP protokolü aracılığıyla tam olarak sadık bir şekilde istemciye aktarır.

Uygulama sunucusu, uygulama yürütme için bir kapsayıcıdır. Uygulamanın uygulama sunucusunda normal şekilde çalışabilmesini sağlamak için öncelikle geliştirme dilinin (Tomcat için Java'dır) çalışmasını desteklemesi gerekir.

İkinci olarak, sınıf kitaplıkları ve güvenlik özellikleri gibi uygulamayla ilgili özellikleri desteklemesi gerekir. Tomcat için, JSP / Sevlet işlemi için gerekli olan standart kitaplığı, Arayüzü vb. Sağlamak gerekir.

Kolaylık sağlamak için, uygulama sunucuları genellikle HTTP Sunucusunun işlevlerini entegre eder, ancak profesyonel HTTP Sunucusu kadar güçlü değildir.

Bu nedenle, uygulama sunucusu genellikle HTTP Sunucusunun arkasında çalışır, uygulamayı çalıştırır, dinamik içeriği statik içeriğe dönüştürür ve HTTP Sunucusu aracılığıyla istemciye dağıtır.

Yönlendirme vekili

Yönlendirme vekili: LAN dışındaki İnternet'i büyük bir kaynak kitaplığı olarak düşünürseniz, LAN'daki istemcinin bir proxy sunucusu aracılığıyla İnternet'e erişmesi gerekir.Bu proxy hizmetine ileri proxy adı verilir.

Yönlendirme vekili "vekil" istemcidir. Örneğin, bir "aksiyon filmi" izlemek için Google'a gitmek istiyorsanız, ancak Çin'de buna izin verilmiyorsa, duvarı aşacak bir temsilci bulmanız gerekir. Bu sözde "ileri temsilci" dir.

Ters proxy ve yük dengeleme

Ters proxy, ileri proxy'nin tam tersidir. Ters proxy, İnternet üzerinden bağlantı isteklerini almak, ardından isteği iç ağdaki bir sunucuya iletmek ve sunucuda elde edilen sonuçları istemciye döndürmek için bir proxy sunucusunu ifade eder.

Şu anda, proxy sunucusu harici olarak bir sunucu gibi davranır ve istemci proxy'den habersizdir. Ters proxy "proxy" sunucudur.

Başka bir örnek olarak, "Youku" da bir "aşk filmi" izlemek istiyorsanız, youku.com isteğinizi filmin depolandığı makineye dağıtacaktır. Bu sözde "ters proxy" dir.

Ters proxy kullanmanın nedenleri aşağıdaki gibidir:

  • Orijinal kaynak sunucusunu koruyun ve gizleyin
  • Şifreleme ve SSL hızlandırma
  • Statik kaynakları önbelleğe alarak web isteklerini hızlandırın
  • Yük dengeleme sağlayın
Yük dengeleme: TODO: Portalı ayrıntılı olarak tanıtmak için bir yük dengeleme bırakın. Adres yeniden yönlendirme: Nginx'in Yeniden Yazma işleminin ana işlevi, URL yeniden yazmayı gerçekleştirmektir. Örneğin, 360.cn'ye yönlendirmek için 360.com ve baidu.com'a baidu.cn girin.

Dinamik ve statik ayırma

Web sitesinin analiz hızını hızlandırmak için dinamik sayfalar ve statik sayfalar, analiz hızını hızlandırmak ve orijinal tek sunucunun baskısını azaltmak için farklı sunucular tarafından ayrıştırılabilir.

Bu, dinamik programların (Java, PHP) uygulama sunucusuna erişmesine izin vermek ve önbellek, resimler, JS, CSS vb .'nin Nginx'e erişmesine izin vermek anlamına gelir.

Nginx kurulumu

Nginx'i indirin:

wgethttp: //nginx.org/download/nginx-1.16.1.tar.gz

Derlenmesi gereken eklentiyi kurun:

  • C ve C ++ kodunu derlemek için GCC.
  • C dilinde yazılmış normal ifade fonksiyon kitaplığı Pcre (Yeniden Yaz modülünü kullanarak).
  • Veri sıkıştırma kitaplığı için Zlib.
  • Secure Socket Layer Cipher Library OpenSSL (SSL desteğini etkinleştir).
yuminstallgccc ++ yuminstall-ypcrepcre-devel yuminstall-yzlibzlib-devel yuminstall-yopensslopenssl-devel

Unzip, yapılandırın (Nginx çeşitli yapılandırma seçeneklerini destekler), derleyin ve Nginx'i kurun:

tar-zxvfnginx-1.15.tar.gzcdnginx-1.16.1 cdnginx-1.16.1 ./yapılandır makeudomakeinstall

Başlat, yeniden başlat, kapat:

cd / usr / local / nginx / Cdsbin ./nginx #Close komutu ./nginx-sstop # Yeniden başlatma, sıcak dağıtım ./nginx-sreload # Yapılandırma dosyasını değiştirdikten sonra tereddüt etmeyin, yine de her seferinde hata yapacağım, değiştirilen nginx.conf yapılandırmasının doğru olup olmadığını kontrol edin ./nginx-t

Doğrulama (tarayıcıya IP girişi):

Yapılandırma dosyası

Nginx.conf yapılandırma dosyası esas olarak üç bölüme ayrılmıştır:

  • Global blok
  • Etkinlikler bloğu
  • HTTPS bloğu

Nginx yapılandırma sözdizimi:

  • Yapılandırma dosyası talimatlardan ve talimat bloklarından oluşur
  • Her komut noktalı virgül (;) ile biter ve talimatlar ve parametreler boşluklarla ayrılır
  • Komut bloğu, parantezlerle birlikte birden çok talimatı gruplar {}
  • İnclude ifadesi, bakımı iyileştirmek için birden çok yapılandırma dosyasının birleştirilmesine izin verir
  • Yorum eklemek için # kullanın
  • Değişkenleri tanımlamak için $ kullanın
  • Bazı talimatların parametreleri normal ifadeleri destekler

Global blok

Global konfigürasyon kısmı, tüm sunucu için geçerli olan parametreleri konfigüre etmek için kullanılır. Temel olarak, Nginx sunucusunu çalıştıran kullanıcının (grubun) yapılandırılması, oluşturulmasına izin verilen İşçi İşlemlerinin sayısı, işlem PID depolama yolu, günlük depolama yolu ve türü ve yapılandırma dosyalarının tanıtımı dahil olmak üzere, Nginx sunucusunun genel çalışmasını etkileyen bazı yapılandırma talimatları ayarlayacaktır.

Örnekler aşağıdaki gibidir:

usernobody; worker_processes4; error_log / data / nginx / logs / error.lognotice;

Etkinlikler bloğu

Olaylar bloğunda yer alan komutlar esas olarak Nginx sunucusu ile kullanıcı arasındaki ağ bağlantısını etkiler.Genel ayarlar, birden çok İş Süreci altında ağ bağlantılarının serileştirilmesini etkinleştirip etkinleştirmemeyi, aynı anda birden çok ağ bağlantısının alınmasına izin verilip verilmeyeceğini ve işleme için hangi olay odaklı modelin seçildiğini içerir. Bağlantı isteği, her Kelime İşleminin aynı anda destekleyebileceği maksimum bağlantı sayısı vb.

Etkinlikler{ # Her iş süreci tarafından desteklenen maksimum bağlantı sayısı 1024'tür. worker_connections1024; }

HTTP bloğu

Bu, Nginx sunucu yapılandırmasının en sık görülen kısmı olarak kabul edilir. Proxy, önbellek ve günlük tanımı ve üçüncü taraf modüllerin yapılandırması gibi çoğu işlev burada bulunur. Şu hususlara dikkat edilmelidir: HTTP bloğu ayrıca HTTP global bloğu, Sunucu bloğu içerebilir.

HTTP genel bloğu

HTTP genel blok yapılandırmasına yönelik talimatlar arasında dosya içe aktarımı, MIME-TYPE tanımı, günlük özelleştirme, bağlantı zaman aşımı süresi ve tekli bağlantı isteklerinin sayısının üst sınırı bulunur.

http { Includemime.types; default_typeapplication / octet-stream; sendfileon; keepalive_timeout65; Sunucu bloğu

Bu, sanal ana bilgisayarla yakından ilişkilidir.Kullanıcının bakış açısından, sanal ana bilgisayar, bağımsız bir donanım ana bilgisayarıyla tamamen aynıdır Bu teknoloji, İnternet sunucu donanımının maliyetinden tasarruf etmek için oluşturulmuştur.

Her HTTP bloğu birden fazla Sunucu bloğu içerebilir ve her Sunucu bloğu bir sanal ana makineye eşdeğerdir.

Her bir Sunucu bloğu ayrıca bir genel Sunucu bloğuna bölünmüştür ve aynı anda birden fazla Konumlandırma bloğu içerebilir.

Global Sunucu bloğu: "Sanal sunucu" bölümü olarak da adlandırılan bu, farklı sunucu_adı talimatlarına göre mantıksal olarak bölünmüş bir grup kaynağı açıklar.Bu sanal sunucular HTTP isteklerine yanıt verir ve bu nedenle HTTP bölümüne dahil edilir.

En yaygın yapılandırma, sanal makine ana bilgisayarının izleme yapılandırması ve sanal ana bilgisayarın adı veya IP yapılandırmasıdır.

server { listen80; #server_name ayrıca joker karakterleri, * .example.com, www.example. *, .example.com'u destekler server_namelocalhost; # charsetkoi8-r; # access_loglogs / host.access.logmain;

Konum bloğu: Bir Sunucu bloğu, birden fazla Konum bloğu ile yapılandırılabilir.

Bu bloğun ana işlevi, sanal ana bilgisayar adı (veya IP takma adı) dışında dize analizi (örneğin, önceki / uri-dizesi) gerçekleştirmek için Nginx sunucusu tarafından alınan istek dizesine (örneğin, sunucu_adı / uri dizesi) dayanır. Belirli bir isteği işlemek için eşleştirin.

Adres yönlendirme, veri önbelleğe alma, yanıt kontrolü ve birçok üçüncü taraf modülü gibi işlevler de burada yapılandırılır.

Yer talimatı açıklaması: Bu yönerge URL ile eşleşmek için kullanılır.

Sözdizimi aşağıdaki gibidir:

locationuri {}
  • =: Bu değiştirici tam bir eşleşme kullanır ve aramayı sonlandırır.
  • ~: Bu değiştirici, büyük / küçük harfe duyarlı düzenli ifade eşlemesi kullanır.
  • ~ *: Bu değiştirici, büyük / küçük harfe duyarlı olmayan düzenli ifade eşlemesi kullanır.
  • ^ ~: URI'yi normal ifadeler olmadan kullanmadan önce, Nginx sunucusunun, kimlik URI'si ile istek dizesi arasında en yüksek eşleşme derecesine sahip Konumu bulması ve ardından Konum bloğundaki normal URI ve istek dizesini kullanmak yerine isteği hemen işlemek için bu Konumu kullanması gerekir. eşleşme.

? > İpucu Not: URI normal ifadeler içeriyorsa, ~ veya ~ * ile işaretlenmelidir.

Bir istek geldiğinde, URI en iyi Konumla eşleşecek şekilde kontrol edilecektir:

  • Normal ifadeler içermeyen konumlar, normal ifadeler içeren Konumların sırasından bağımsız olarak en iyi eşleşme olarak kabul edilir.
  • Yapılandırma dosyasında arama sırasına göre düzenli ifade eşleştirmesi gerçekleştirin. Arama, ilk normal ifade eşleşmesi bulunduktan sonra sona erer. İstek işleme, bu en iyi Konum tarafından sağlanır.
yer/{ roothtml; indexindex.htmlindex.htm; } # error_page404 / 404.html; # redirectservererrorpagestothestaticpage / 50x.html # error_page500502503504 / 50x.html; location = / 50x.html { roothtml; } yer/{ #Try_files komutu verilen parametre sırasına göre eşleşmeye çalışacaktır. try_files $ uri $ uri // index.html; } Nginx.conf'un ayrıntılı yapılandırması aşağıdaki gibidir: # Nginx'in çalıştırdığı kullanıcı ve kullanıcı grubunu tanımlayın userwwwwww; #nginxGenellikle cpu sayısına eşit olarak ayarlanan işlem sayısı worker_processes4; #Global hata günlüğü tanım türü, # error_log / data / nginx / logs / error.log; # error_log / data / nginx / logs / error.lognotice; # Günlük dosyası depolama yolu access_logpath access_log / data / nginx / logs / lazyegg.com / web / access.logcombinedio; #Process pid dosyası # pidlogs / nginx.pid; # Bir işlemin açabileceği maksimum tanımlayıcı sayısını belirtin: sayı # Çalışma modu ve maksimum bağlantı sayısı ## Bu talimat, bir nginx işlemi tarafından açılan maksimum dosya tanımlayıcı sayısını ifade eder. Teorik değer, maksimum açık dosya sayısının (ulimit -n) nginx işlemlerinin sayısına bölünmesi olmalıdır, ancak nginx tahsis istekleri o kadar tek tip değildir, bu nedenle en iyisidir Ulimit -n değeri ile tutarlıdır. # Bunun nedeni, isteklerin nginx zamanlaması sırasında işlemlere tahsis edilmesinin çok dengeli olmamasıdır, bu nedenle 10240'ı doldurursanız, toplam eşzamanlılık 30.000 ila 40.000'e ulaştığında, işlem 10240'ı aşabilir ve sonra bir 502 hatası döndürülür. worker_rlimit_nofile65535; ###############################Etkinlikler################ ############### Etkinlikler{ #Reference olay modeli, kullanım; epoll modeli kullanım listesi # Tek bir işlem için maksimum bağlantı sayısı (maksimum bağlantı sayısı = bağlantı sayısı + işlem sayısı) worker_connections1024; #hayatta kalma zaman aşımı keepalive_timeout60; # İstemci istek başlığının arabellek boyutu. client_header_buffer_size4k; # Bu, açık dosyalar için önbelleği belirleyecektir. Varsayılan ayar etkinleştirilmemiştir. Max, önbellek sayısını belirtir. Açık dosyaların sayısıyla tutarlı olması önerilir. Etkin değil, dosyanın istenmeden ne kadar süre sonra silineceğini ifade eder. open_file_cachemax = 65535inactive = 60s; # Bu, önbelleğe alınan geçerli bilgilerin ne sıklıkla kontrol edileceğini belirtir. open_file_cache_valid80s; #open_file_cache Dosyanın talimatın etkin olmayan parametre zamanında kullanıldığı minimum sayısı. Bu sayıyı aşarsa, dosya tanımlayıcısı her zaman önbellekte açılır. Yukarıdaki örnekte olduğu gibi, bir dosya etkin olmayan zamanda bir kez kullanılmazsa, Kaldırmak. open_file_cache_min_uses1; #Syntax: open_file_cache_errorson | off Varsayılan değer: open_file_cache_errorsoff Alanları kullanın: http, sunucu, konum Bu talimat, bir dosyanın aranmasının önbellek hatalarının kaydedilip kaydedilmeyeceğini belirtir. open_file_cache_errorson; } ############################### http ################## ############### #Set http server, yük dengeleme desteği sağlamak için ters proxy işlevini kullanın http { # Dosya uzantısı ve dosya türü eşleme tablosu Includemime.types; #Default dosya türü default_typeapplication / octet-stream; # Varsayılan kodlama charsetutf-8; # Sunucu adı hash tablosu boyutu server_names_hash_bucket_size128; # İstemci istek başlığının arabellek boyutu. client_header_buffer_size32k; # İstemci isteği başlığı arabellek boyutu. large_client_header_buffers464k; # İstemci tarafından izin verilen maksimum tek dosya baytı sayısı client_max_body_size8m; # Verimli dosya aktarım modunu etkinleştirin. Dosya gönderme talimatı, nginx'in dosya gönderme işlevini çıktı dosyalarına çağırıp çağırmayacağını belirtir. Normal uygulamalar için, açık olarak ayarlanır. Yükleme ve ağır disk GÇ yükleme uygulamaları olan diğer uygulamalar için kullanılıyorsa, diski ve ağı dengelemek için kapalı olarak ayarlanabilir. / O işlem hızı, sistemin yükünü azaltır. Not: Resim düzgün görüntülenmiyorsa, bunu kapalı olarak değiştirin. sendfileon; # Açık dizin listesi erişimi, indirme sunucusu için uygun, varsayılan olarak kapalıdır. autoindexon; # Bu seçenek, soketin TCP_CORK seçeneğinin kullanımına izin verir veya yasaklar, bu seçenek yalnızca dosya gönderme kullanılırken kullanılır tcp_nopushon; tcp_nodelayon; # Uzun bağlantı zaman aşımı, saniye cinsinden keepalive_timeout120; # HızlıCGI ile ilgili parametreler, web sitesinin performansını iyileştirmek içindir: kaynak kullanımını azaltmak ve erişim hızını artırmak. Aşağıdaki parametreler tam anlamıyla anlaşılabilir. fastcgi_connect_timeout300; fastcgi_send_timeout300; fastcgi_read_timeout300; fastcgi_buffer_size64k; fastcgi_buffers464k; fastcgi_busy_buffers_size128k; fastcgi_temp_file_write_size128k; #gzipModule Ayarları gzipon; #Gzip sıkıştırma çıktısını etkinleştir gzip_min_length1k; # Minimum sıkıştırılmış dosya boyutu gzip_buffers416k; # Sıkıştırma arabelleği gzip_http_version1.0; # Sıkıştırılmış sürüm (varsayılan 1.1, ön uç squid2.5 ise lütfen 1.0 kullanın) gzip_comp_level2; # Sıkıştırma düzeyi gzip_typestext / plainapplication / x-javascripttext / cssapplication / xml; #Compression type, textml varsayılan olarak zaten eklenmiştir, bu nedenle tekrar yazmaya gerek yoktur. Yazmak sorun olmayacak, ancak bir uyarı olacaktır. gzip_varyon; # IP bağlantılarının limitini açarken kullanılması gerekir # limit_zonecrawler $ binary_remote_addr10m; #Yük dengeleme yapılandırması upstreamlazyegg.net { #upstream Yük dengeleme için ağırlık, makine yapılandırmasına göre tanımlanabilen ağırlıktır. Ağırlık parametresi ağırlığı temsil eder, ağırlık ne kadar yüksekse atanma olasılığı o kadar büyük olur. server192.168.80.121: 80 ağırlık = 3; server192.168.80.122: 80 ağırlık = 2; server192.168.80.123: 80 ağırlık = 3; # nginx'in yukarı akışı şu anda 4 dağıtım yolunu destekliyor # 1, yoklama (varsayılan) # Her istek, farklı arka uç sunuculara kronolojik sırayla tek tek tahsis edilir.Arka uç sunucusu çalışmıyorsa otomatik olarak kaldırılabilir. # 2, ağırlık # Yoklama olasılığını belirtin, ağırlık, eşit olmayan arka uç sunucu performansı durumunda kullanılan erişim oranıyla orantılıdır. #Örneğin: #upstreambakend { # server192.168.0.14weight = 10; # server192.168.0.15weight = 10; #} # 2, ip_hash # Her istek, erişim ipinin karma sonucuna göre tahsis edilir, böylece her ziyaretçinin oturum problemini çözebilecek bir arka uç sunucusuna sabit erişimi olur. #Örneğin: #upstreambakend { #ip_hash; # server192.168.0.14: 88; # server192.168.0.15: 80; #} # 3, adil (üçüncü taraf) # İsteği tahsis etmek için arka uç sunucunun yanıt süresine göre kısa yanıt süresi tercih edilir. #upstreambackend { # servererver1; # servererver2; # adil; #} # 4, url_hash (üçüncü taraf) # Ziyaret edilen url'nin karma sonucuna göre istekleri 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. # Örnek: Yukarı akışta bir karma ifadesi ekleyin ve ağırlık gibi diğer parametreler sunucu ifadesine yazılamaz. Hash_method, kullanılan karma algoritmadır #upstreambackend { # serverSquid1: 3128; # serverSquid2: 3128; # hash $ request_uri; # hash_methodcrc32; #} # ipuçları: #upstreambakend {# Yük dengeleme cihazının IP ve cihaz durumunu tanımlayın} { #ip_hash; # server127.0.0.1: 9090down; # server127.0.0.1: 8080 ağırlık = 2; # server127.0.0.1: 6060; # server127.0.0.1: 7070backup; #} Yük dengelemeyi kullanması gereken sunuculara # proxy_pass ekleyin http: // bakend /; # Her cihazın durumu şu şekilde ayarlanmıştır: # 1. down, siparişten önceki sunucunun geçici olarak yüke dahil olmadığı anlamına gelir # 2. ağırlık ne kadar büyükse, yükün ağırlığı o kadar büyük olur. # 3.max_fails: Varsayılan izin verilen istek hatası sayısı 1'dir. Maksimum sayı aşıldığında, proxy_next_upstream modülü tarafından tanımlanan hata döndürülür # 4.fail_timeout: max_fails başarısızlığından sonraki duraklama süresi. # 5.yedekleme: Diğer tüm yedek olmayan makineler çalışmadığında veya meşgul olduğunda, yedekleme makinesini isteyin. Yani bu makine en hafif basınca sahip olacak. #nginx, kullanılmayan sunucular tarafından kullanılmak üzere aynı anda birden fazla yük dengeleme grubu kurmayı destekler. #client_body_in_file_only, istemci konumundaki verileri hata ayıklama amacıyla dosyaya kaydetmek için Açık olarak ayarlanmıştır #client_body_temp_path Kayıt dosyasının dizinini ayarlamak, 3 dizin düzeyine kadar ayarlanabilir #location, URL ile eşleşir. Yeniden yönlendirme veya yeni proxy yük dengeleme gerçekleştirilebilir } #Virtual ana bilgisayar yapılandırması server { # Dinleme bağlantı noktası listen80; # Alan adları, boşluklarla ayrılmış birden çok ad içerebilir server_namelazyegg.net; #Default girdi dosya adı indexindex.htmlindex.htmindex.php; kök / veri / www / lazyegg; # ******'Da yük dengeleme konum ~. *. (php | php5)? $ { fastcgi_pass127.0.0.1: 9000; fastcgi_indexindex.php; includefastcgi.conf; } # Resim önbellek süresi ayarı konum ~. *. (gif | jpg | jpeg | png | bmp | swf) $ { expires10d; } #JS ve CSS önbellek süresi ayarları konum ~. *. (js | css)? $ { expires1h; } #Log format ayarı # $ remote_addr ve $ http_x_forwarded_for, istemcinin ip adresini kaydetmek için kullanılır; # $ remote_user: istemci kullanıcı adını kaydetmek için kullanılır; # $ time_local: erişim zamanını ve saat dilimini kaydetmek için kullanılır; # $ istek: İsteği kaydetmek için kullanılan URL ve http protokolü; # $ durum: isteğin durumunu kaydetmek için kullanılır; başarı 200'dür, # $ body_bytes_sent: istemciye gönderilen dosyanın gövde içeriğinin boyutunu kaydedin; # $ http_referer: o sayfa bağlantısından ziyaretleri kaydetmek için kullanılır; # $ http_user_agent: istemcinin tarayıcısının ilgili bilgilerini kaydedin; #Genellikle web sunucusu ters proxy'nin arkasına yerleştirilir, böylece istemcinin IP adresi alınamaz. $ Remote_add aracılığıyla elde edilen IP adresi, ters proxy sunucusunun IP adresidir. Ters proxy sunucusu, orijinal istemcinin IP adresini ve orijinal istemcinin isteğinin sunucu adresini kaydetmek için yönlendirme isteğinin http başlık bilgisine x_forwarded_for bilgilerini ekleyebilir. log_formataccess '$ remote_addr- $ remote_user "$ istek"' "$ durum $ body_bytes_sent" $ http_referer " '"$ http_user_agent" $ http_x_forwarded_for'; # Bu sanal konağın erişim günlüğünü tanımlayın access_log / usr / local / nginx / logs / host.access.logmain; access_log / usr / local / nginx / logs / host.access.404.loglog404; # "/ Connect-controller" için ters proxy'yi etkinleştirin location / connect-controller { proxy_passhttp: //127.0.0.1: 88; # Lütfen buradaki bağlantı noktası numarasının sanal ana bilgisayar tarafından izlenen bağlantı noktası numarasıyla (yani, sunucu tarafından izlenen bağlantı noktası) aynı olamayacağını unutmayın. proxy_redirectoff; proxy_set_headerX-Gerçek-IP $ remote_addr; # Arka uç web sunucusu, X-Forwarded-For aracılığıyla kullanıcının gerçek IP'sini alabilir proxy_set_headerX-Forwarded-For $ proxy_add_x_forwarded_for; # Aşağıdakiler, isteğe bağlı bazı ters proxy yapılandırmalarıdır. proxy_set_headerHost $ ana bilgisayar; # İstemci tarafından izin verilen maksimum tek dosya baytı sayısı client_max_body_size10m; #Buffer proxy arabelleği, istemci tarafından istenen maksimum bayt sayısını, # Eğer 256k gibi nispeten büyük bir sayıya ayarlarsanız, firefox veya IE tarayıcı kullanıp kullanmadığınızdan bağımsız olarak 256k'den küçük herhangi bir resmi göndermeniz normaldir. Bu komutu yorumlar ve işletim sisteminin sayfa boyutunun iki katı olan 8k veya 16k varsayılan client_body_buffer_size ayarını kullanırsanız, sorun ortaya çıkar. # Firefox4.0 veya IE8.0 kullanıp kullanmadığınıza bakılmaksızın, yaklaşık 200.000'lik daha büyük bir resim gönderirseniz 500InternalServerError döndürülür client_body_buffer_size128k; # Nginx'in 400 veya daha yüksek HTTP yanıt kodunu engellemesini belirtir. proxy_intercept_errorson; # Arka uç sunucu bağlantı zaman aşımı süresi_ Yanıt zaman aşımı süresini bekleyerek el sıkışmayı başlatma #nginx Arka uç sunucusuyla bağlantı zaman aşımı (Proxy bağlantı zaman aşımı) proxy_connect_timeout90; # Arka uç sunucu veri dönüş süresi (aracı gönderme zaman aşımı) # Arka uç sunucu verileri geri dönüş süresi_Bu, arka uç sunucusunun tüm verileri belirtilen süre içinde iletmesi gerektiği anlamına gelir proxy_send_timeout90; # Bağlantı başarılı olduktan sonra, arka uç sunucu yanıt süresi (aracı alma zaman aşımı) # Bağlantı başarılı olduktan sonra_Arka uç sunucunun yanıt süresini bekliyor_ Aslında, işlenmek üzere arka uç kuyruğuna girmiştir (arka uç sunucunun istek zamanını işlediği de söylenebilir) proxy_read_timeout90; # Kullanıcı başlık bilgilerini kaydetmek için proxy sunucusunun (nginx) arabellek boyutunu ayarlayın # Proxy sunucusundan okunan yanıtın ilk bölümünün arabellek boyutunu ayarlayın. Normalde, yanıtın bu bölümü küçük bir yanıt başlığı içerir. Varsayılan olarak, bu değerin boyutu proxy_buffers komutunda belirtilen bir arabellek boyutudur. Ama daha küçük ayarlanabilir proxy_buffer_size4k; #proxy_buffers arabelleği, ortalama web sayfası 32k'nin altında ayarlanmış # Yanıtı okumak için kullanılan arabelleğin sayısını ve boyutunu ayarlayın (proxy sunucusundan), varsayılan ayrıca sayfa boyutudur, işletim sistemine bağlı olarak 4k veya 8k olabilir proxy_buffers432k; # Yüksek yük altında tampon boyutu (proxy_buffers * 2) proxy_busy_buffers_size64k; # Bir çalışan işlemin dosyaları aktarırken çok uzun süre engellemesini önlemek için proxy_temp_path yazarken verilerin boyutunu ayarlayın # Bu değerden daha büyük önbellek klasörü boyutunu ayarlayın, yukarı akış sunucusundan yüklenecektir proxy_temp_file_write_size64k; } # Yerel dinamik ve statik ayırma ters proxy yapılandırması # Tüm jsp sayfaları tomcat veya resin ile işlenir konum ~. (jsp | jspx | do)? $ { proxy_set_headerHost $ ana bilgisayar; proxy_set_headerX-Gerçek-IP $ remote_addr; proxy_set_headerX-Forwarded-For $ proxy_add_x_forwarded_for; proxy_passhttp: //127.0.0.1: 8080; } } }

Nginx yapılandırma örneği

Ters proxy Demo 1

Gerçekleşme etkisi: Nginx ters proxy kullanın, test.com adresini ziyaret edin ve doğrudan kendi makinenize 127.0.0.1:8080 gidin

Bir Tomcat başlatın ve tarayıcının adres çubuğuna 127.0.0.1:8080 girin.

Aşağıdaki arayüz belirir:

Yerel Ana Bilgisayar dosyasını (C: \ Windows \ System32 \ drivers \ etc) değiştirerek, 127.0.0.1 www.12345.com'u www.12345.com'u kendi makine IP'nizle eşleştirmek için ekleyerek.

Yapılandırma tamamlandıktan sonra, ilk adımda ortaya çıkan Tomcat başlangıç arayüzüne www.test.com:8080 üzerinden erişebiliriz.

Peki sadece www.12345.com yazarak Tomcat başlangıç arayüzüne nasıl geçebilirsiniz? Nginx'in ters proxy'si kullanılır.

nginx.conf yapılandırma dosyasını değiştirin ve aşağıdaki yapılandırma proxy_pass öğesini ekleyin:

server { listen80; server_namelocalhost; # charsetkoi8-r; # access_loglogs / host.access.logmain; yer/{ proxy_passhttp: //127.0.0.1: 8080; }

Yukarıda yapılandırıldığı gibi, bağlantı noktası 80'i izliyoruz ve erişim etki alanı adı www.12345.com. Bağlantı noktası numarası eklenmezse, varsayılan bağlantı noktası 80'dir, bu nedenle etki alanı adına erişirken 127.0.0.1:8080 yoluna atlayacaktır.

Tarayıcıya www.12345.com adresini girin ve sonuçlar aşağıdaki gibidir:

Ters proxy Demo 2

Gerçekleştirme etkisi: Erişim yoluna göre farklı bağlantı noktalarının hizmetlerine atlamak için Nginx ters proxy'yi kullanın:

  • Doğrudan 127.0.0.1:8080'e atlamak için adresini ziyaret edin.
  • Doğrudan 127.0.0.1:8081'e atlamak için adresini ziyaret edin.

Sunucuda iki Tomcats başlatın ve bağlantı noktası numaralarından birini 8081 olarak değiştirin.

Tomcat / webapps / dizini altına iki klasör ekleyin ve rastgele bir HTML sayfası yazın.Java / index.html ve egg / index.html'yi oluşturdum.

nginx.conf dosyasını değiştirin ve HTTP bloğuna hizmet {} ekleyin:

server { listen80; server_namelocalhost; konum ~ / java / { proxy_passhttp: //127.0.0.1: 8080; } yer / yumurta / { proxy_passhttp: //127.0.0.1: 8081; } }

Nginx'i yeniden başlatın ve etkisini doğrulayın:

Nginx yapılandırması: yük dengeleme

İnternet bilgilerinin hızla artmasıyla birlikte, Yük Dengesi artık çok yabancı bir konu değil.

Adından da anlaşılacağı gibi, yük dengeleme, yükü farklı hizmet birimlerine dağıtmaktır, yalnızca hizmetlerin kullanılabilirliğini sağlamak için değil, aynı zamanda yanıtın kullanıcılara iyi bir deneyim sağlayacak kadar hızlı olmasını sağlamaktır.

Trafik ve veri trafiğindeki hızlı artış, çeşitli yük dengeleme ürünlerini doğurmuştur.Birçok profesyonel yük dengeleme donanımı iyi işlevler sağlar, ancak bunlar pahalıdır.

Bu, yük dengeleme yazılımını çok popüler hale getirir.Nginx bunlardan biridir.Linux altında, Nginx, LVS, Haproxy vb. Hizmetler yük dengeleme hizmetleri sağlayabilir.

Nginx'in yük dengelemesi, Proxy modülü ve Yukarı Akım modülü tarafından gerçekleştirilir. Yukarı akış modülü, bir grup yukarı akış sunucusunun tanımlandığı yeni bir yapılandırma bölümünü etkinleştirecektir.

Gerçekleştirme etkisi: Yük dengelemeyi yapılandırın.

İki Tomcat'i aynı anda başlatın (etkiyi doğrulamak için, Tomcat bağlantı noktası numarasını aynı anda değiştirin, bu arada, Tomcat varsayılan karşılama sayfası index.jsp'yi apache-tomcat-9.0.29 / webapps / ROOR dizini altında değiştirin, 8081 açılış sayfasına bakın "Dandan" hayır):

nginx.conf'u değiştirin:

http { upstreammyserver { serverlocalhost: 8080; serverlocalhost: 8081; } server { listen80; yer/{ proxy_passhttp: // sunucum; } } }

Etkiyi doğrulamak için Nginx'i yeniden başlatın (varsayılan yoklama yöntemi, her yeni pencere açtığınızda, 8080 ve 8081 dönüşümlü olarak görünecektir, aynı pencere için tarayıcı önbelleğini kapatmanız gerekir).

Nginx dağıtım stratejisi:

  • Yoklama (varsayılan) Her istek, farklı arka uç sunuculara kronolojik sırayla tek tek atanır.Arka uç sunucusu Çalışmazsa, otomatik olarak ortadan kaldırılabilir.
  • Ağırlık ağırlık anlamına gelir Varsayılan değer 1'dir. Ağırlık ne kadar yüksekse o kadar çok istemci atanır. Yoklama olasılığı belirlenir Ağırlık erişim oranıyla orantılıdır. Düzensiz arka uç sunucu performansı için kullanılır.

Örneğin:

upstreamserver_pool { server192.168.5.21weight = 10; server192.168.5.22weight = 10;}

ip_hash Her istek, erişim IP'sinin karma sonucuna göre tahsis edilir, böylece her ziyaretçinin, oturum problemini çözebilecek bir arka uç sunucusuna sabit bir erişimi olur.

Örneğin:

upstreamserver_pool { ip_hash; server192.168.5.21: 80; server192.168.5.22: 80; }

Adil (üçüncü taraf), istekleri arka uç sunucunun yanıt süresine göre tahsis eder, en kısa yanıt süresi tercih edilir.

upstreamserver_pool { server192.168.5.21: 80; server192.168.5.22: 80; orta; }

Nginx yapılandırması: dinamik ve statik ayrımı

Nginx dinamik ve statik ayırma, dinamik ve statik istekleri ayırmak anlamına gelir, dinamik ve statik sayfaları basitçe fiziksel olarak ayırmak olarak anlaşılamaz.

Dinamik istekler, statik sayfaları işlemek için Nginx ve dinamik sayfaları işlemek için Tomcat kullanmak olarak anlaşılabilecek statik isteklerden ayrılmalıdır.

Mevcut gerçekleşme perspektifinden, dinamik ve statik ayrımı kabaca iki türe ayrılabilir:

  • Statik dosyaları tamamen ayrı bir etki alanı adına ayırmak ve bağımsız bir sunucuya koymak da mevcut ana çözümdür;
  • Dinamik ve statik dosyalar karıştırılır ve Nginx ile ayrıştırılarak yayınlanır.

Farklı istek iletimi elde etmek için Konum aracılığıyla farklı son ekler belirtin. Expires parametre ayarı aracılığıyla, tarayıcı önbelleğinin sona erme süresini belirleyebilir ve sunucuyla önceki istekleri ve trafiği azaltabilirsiniz.

Belirli Sona Erme tanımı: Bir kaynak için bir sona erme süresi ayarlamaktır, yani doğrulama için sunucuya gitmeye gerek yoktur ve tarayıcının kendisi süresinin dolup dolmadığını onaylayabilir, böylece ek trafik üretilmez.

Bu yöntem, sık değişmeyen kaynaklar için çok uygundur (dosyalar sık güncelleniyorsa, önbelleğe almak için Expires kullanılması önerilmez).

Burada 3d olarak ayarladım, yani bu 3 gün içinde URL'yi ziyaret etmek, bir istek göndermek ve sunucuyu dosyanın son güncelleme zamanıyla karşılaştırmak, daha sonra sunucudan alınmayacak ve durum kodu 304 döndürülecektir. Sunucudan yeniden indirin ve durum kodu 200'ü iade edin.

Sunucu, kendi statik dosyalarını depolamak için bir dizin bulur:

nginx.conf'u değiştirin:

server { listen80; server_namelocalhost; konum / statik / { kök / usr / veri / www; } konum / resim / { kök / usr / veri /; autoindexon; }

. / Nginx -s yeniden yükleyin, etkiyi doğrulayın:

Dinleme bağlantı noktası ve erişim adı eklemek için, kilit nokta Konum eklemek ve son olarak Nginx yapılandırmasının doğru olup olmadığını kontrol etmek ve ardından dinamik ve statik ayırmanın başarılı olup olmadığını test etmektir, talimatlara erişip erişemeyeceğinizi görmek için arka uç Tomcat sunucusundaki statik bir dosyayı silin. Statik kaynak Nginx, arka uç Tomcat sunucusuna gitmeden doğrudan döndürülür.

Nginx'in Yeniden Yazması

Yeniden yazma, Nginx sunucusu tarafından sağlanan ve URL yeniden yazma ve yeniden yönlendirme işlevlerini uygulayabilen önemli bir işlevdir.

Senaryo aşağıdaki gibidir:

  • URL erişim yeniden yönlendirmesi, geliştirme ve tasarımı destekler. Sayfa atlama, uyumluluk desteği (yeni ve eski sürüm değişikliği), görüntüleme efekti (web sitesi kolaylaştırıldı) vb.
  • SEO optimizasyonu (Nginx sözde statik desteği)
  • Arka plan bakımı, trafik yönlendirme vb.
  • Güvenlik (dinamik arayüzle gizlenmiş)

Talimat, URI'yi normal ifadeler kullanarak değiştirmektir. Aynı anda bir veya daha fazla talimat olabilir. URL'lerin sırayla eşleştirilmesi ve işlenmesi gerekir.

Bu talimat Sunucu bloğunda veya Konum bloğunda yapılandırılabilir ve temel sözdizimi yapısı aşağıdaki gibidir:

yeniden yazma, değiştirme;

Ters proxy Demo2'deki örneği kullanarak, nginx.conf'u değiştirin (yalnızca bir Yeniden Yaz satırı ekleyin):

server { listen80; server_namelocalhost; konum / java / { proxy_passhttp: //127.0.0.1: 8080; yeniden yaz ^ / java / egg / redirect; } yer / yumurta / { proxy_passhttp: //127.0.0.1: 8081; } }

. / Nginx -s yeniden yükleyin, etkiyi doğrulayın (giriş ip / java / yumurtaya yönlendirilir):

Yeniden Yazma talimatı Sunucu bloğunda veya Konum bloğunda yapılandırılabilir ve temel sözdizimi yapısı aşağıdaki gibidir:

yeniden yazma, değiştirme;
  • Yeniden yazmanın anlamı: Bu talimat, URL yeniden yazmayı uygulamak içindir.
  • Normal ifadenin anlamı: URI ile eşleştirmek için kullanılan normal ifade.
  • değiştirme: Normal ifade ile eşleşen içeriği değiştirmeyle değiştirin.
  • bayrak: bayrak işareti.

Bayrak aşağıdaki değerlere sahiptir:

  • son: Bu kural eşleştikten sonra, yeni Konum URI kuralıyla eşleşmeye devam edin. (nadiren kullanılır)
  • break: Bu kural, eşleştirme tamamlandığında sona erecek ve sonraki kurallarla eşleşmeyecektir (yaygın olarak kullanılmaz).
  • yönlendirme: 302 geçici yeniden yönlendirmeyi döndürün, tarayıcı adresi yeniden yönlendirilen yeni URL adresini gösterecektir.
  • kalıcı: 301 kalıcı yeniden yönlendirmesini döndür. Tarayıcı adresi, yönlendirilen yeni URL adresini gösterecektir.
yeniden yazın ^ / (. *)

Nginx yüksek kullanılabilirlik

Web sunucusu kümesi bir şehir olarak kabul edilirse, yük dengeleme sunucusu bir şehir kapısına eşdeğerdir. "Şehir kapısı" kapatılırsa dış dünyaya geçiş kesilecektir.

Yalnızca bir Nginx yükleme sunucusu varsa, başarısız olduğunda tüm web sitesine erişilemez.

Dolayısıyla, yük devretme ve yüksek kullanılabilirlik elde etmek için iki veya daha fazla Nginx'e ihtiyacımız var:

Peki, yüksek kullanılabilirlik nasıl yapılandırılır

Çift makine sıcak yedekleme planı

Bu çözüm, yerel işletmeler arasında en yaygın yüksek kullanılabilirlik çözümüdür. İkili sistem çalışırken bekleme, aslında bir sunucunun hizmet sağladığı ve diğerinin belirli bir hizmetin bekleme durumu olduğu anlamına gelir. Bir sunucu kullanılamadığında, diğeri Onun yerini alacak.

Keepalived nedir? Keepalived yazılımı orijinal olarak, LVS küme sistemindeki her bir hizmet düğümünün durumunu yönetmek ve izlemek için LVS yük dengeleme yazılımı için tasarlanmıştır.

Daha sonra yüksek kullanılabilirlik sağlayabilen VRRP (Virtual Router Redundancy Protocol) fonksiyonu eklendi.

Bu nedenle, LVS yazılımını yönetebilmenin yanı sıra Keepalived, diğer hizmetler (örneğin: Nginx, Haproxy, MySQL, vb.) İçin yüksek düzeyde erişilebilir bir çözüm yazılımı olarak da kullanılabilir.

Yük devretme mekanizması

Keepalived yüksek kullanılabilirlik hizmetleri arasındaki yük devretme aktarımı, VRRP aracılığıyla gerçekleştirilir.

Keepalived hizmeti normal şekilde çalışırken, ana ana düğüm, yedekleme düğümüne canlı olduğunu bildirmek için sürekli olarak yedekleme düğümüne (çok noktaya yayın) sinyal mesajları gönderecektir.

Birincil Ana düğüm başarısız olduğunda, kalp atışı mesajları gönderemez ve bekleme düğümü, özerk Ana düğümden kalp atışını algılamaya devam edemez, bu nedenle birincil Ana düğümün IP kaynaklarını ve hizmetlerini devralmak için kendi devralma programını çağırır.

Master Backup IP

Nginx Keepaliver(yum install keepalived -y)

/etc/keepalived/keepalived.conf

# # vrrp_scriptchk_http_port{ script"/usr/local/src/check_nginx.sh"#nginx interval2# weight2# } #vrrp vrrp_instanceVI_1{ stateMASTER#keepalivedMASTERBACKUP interfaceens33#vrrp(centos)ifconfig virtual_router_id66# priority100# advert_int1#1s(vrrp) # authentication{ auth_typePASS#MASTERBACKUP auth_pass1111 } track_script{ chk_http_port# } virtual_ipaddress{ 192.168.16.150#ip(VIP) } } # # vrrp_scriptchk_http_port{ script"/usr/local/src/check_nginx.sh"#nginx interval2# weight2# } #vrrp vrrp_instanceVI_1{ stateBACKUP#keepalivedMASTERBACKUP interfaceens33#vrrp(centos)ifconfig virtual_router_id66# priority99# advert_int1#1s(vrrp) # authentication{ auth_typePASS#MASTERBACKUP auth_pass1111 } track_script{ chk_http_port# } virtual_ipaddress{ 192.168.16.150#ip(VIP) } }

(chmod 775 check_nginx.sh)

#! / bin / bash #nginx A=`ps-Cnginx--no-header|wc-l` if;then#nginxnginx systemctlstartnginx#nginx if;then#nginxkeepalivedVIP killallkeepalived fi fi

Nginx Keepalivedsystemctl start keepalived.service

Nginx Nginx IP OK

Nginx

Nginx Nginx Master Worker

Master Worker

Worker Worker

master-workers
  • nginx-s reload
  • Worker Master Worker
WorkerNginx Redis IO Worker Worker CPU Worker CPU CPU CPU # worker worker_processes4 #work cpu(4 work 4cpu) worker_cpu_affinity0001001001001000 #work cpu (4 work 8cpu 4 ) worker_cpu_affinity0000001000000100000010000001000 worker_connection Worker Nginx worker_connections*worker_processes HTTP worker_connections*worker_processes http1.1 worker_connections*worker_processes /2 HTTP worker_connections*worker_processes/4Nginx

Nginx

Nginx Nginx

Nginx

Nginx Nginx ./configure--prefix=/usr/local/nginx--with-http_stub_status_module--with-pcre--with-http_ssl_module

Nginx

Nginx Nginx

  • HTTP Server

Nginx

nginx./sbin/nginx nginx./sbin/nginx-sstop./sbin/nginx-squit ./sbin/nginx-sreload()servicenginxreload ./sbin/nginx-c/usr/local/nginx/conf/nginx.conf nginx./sbin/nginx-v ./sbin/nginx-t ./sbin/nginx-h

Nginx

worker_processes4;# work_connections65535;# error_log/data/nginx/logs/error.log;#

Nginx

Nginx IO

Master Worker Master

Master Worker Master Woker

Nginx Work Reactor I/O NIO

I/O I/O Select epoll

Select

Nginx Work I/O FD AcceptReadWrite Close FD

Work

Worker I/O

Worker CPU

Nginx Apache

Web Apache Nginx Apache

Nginx Apache Nginx

Nginx Upstream

  • weight
  • ip_hash ip hash
  • fairurl_hash

Nginx ?

  • worker_processes Nginx Worker CPU 1
  • worker_connections
  • Gzip HTTP
  • access_logs Nginx CPU Nginx
Bu makale, Java eşzamanlılığında kilit optimizasyonunu ve iş parçacığı havuzu optimizasyonunu anlamanızı sağlar
önceki
Sıfırdan yeni başlayanlar için bir arka uç teknoloji yığını oluşturun
Sonraki
RocketMQ işlem mekanizmasının uygulama süreci, mesaj göndermede neden sıfır kayıp elde edebiliyor?
SpringBoot projesi: RedisTemplate hafif mesaj kuyruğu uygular
Birden fazla deneyin paralel yinelemesini nasıl elde edebilirsiniz, Alimama'nın A / B testi uygulaması hakkında konuşun
On milyarlarca trafik taşıyan yüksek performanslı bir mimari nasıl tasarlanır?
Ant Financial'ın 100 milyon düzeyinde eşzamanlılık altında mobil uçtan uca ağ erişim mimarisinin analizi
Zookeeper tarafından dağıtılmış kilit ve Zookeeper'a dayalı liderlik seçimi hakkında derinlemesine anlayış
Kandırılmaktan bunalıma giren sarhoş bir adam yüz dolarlık banknot dağıtır ve intihar etmek ister.
Tayland'da okumak için sahip olmanız gereken yetenekleri biliyor musunuz?
Lisansüstü eğitim için Tayland'a gitmek ister misiniz, bunların hepsini biliyor musunuz?
iyi haberler! Tayland'da hastaneden taburcu edilen iki önemli hasta: Tayland, bulaşıcı hastalıkları önleme ve kontrol etme kabiliyetiyle dünyada altıncı sırada
Bahşiş verme bilgisi ile ilgili olarak, Tayland seyahati için ipucu açmanın doğru yolu
Tmall 618 Tayland Reklamı: Tanrı "Sıcak" dizisini tersine çeviriyor
To Top