Girişten uygulamaya Nginx'i açıklayın

Giriş

1.1 Tanıtım

Nginx, hafif bir web sunucusu / ters proxy sunucusu ve e-posta (IMAP / POP3 / SMTP) proxy sunucusudur. İlk olarak Rus programcı Igor Sysoev tarafından geliştirilmiştir ve Rusya'da en çok ziyaret edilen ikinci site olan Rambler.ru'dur. Geliştirme. Ve BSD benzeri altında yayınlandı. Daha az bellek ve güçlü eşzamanlılık kullanımı ile karakterizedir Mevcut geliştirme ivmesi güçlüdür.Web alanındaki en klasik lamba kombinasyonu bir lnmp kombinasyonu haline gelmiştir.

1.2 nginx'i kim kullanıyor

Şu anda, Netease, Sohu, Tencent, Sina gibi bazı yerel portal web siteleri ve kendi kendine öğrenen, Douban, vb. Gibi çok sayıda yeni ortaya çıkan web siteleri.

1.3 Web Sunucusunun Pazar Payı

https://news.netcraft.com/archives/category/web-server-survey/

Kurulum

Nginx resmi web sitesinin indirme adresi: Nginx resmi web sitesi üç tür sürüm sağlar:

  • Mainline sürümü: Mainline şu anda geliştirme sürümü olduğu söylenebilecek Nginx'in ana sürümüdür
  • Kararlı sürüm: en son kararlı sürüm, üretim ortamında önerilen sürüm
  • Eski sürümler: eski eski sürümün kararlı sürümü

2.1 Yazılım indirme adresi

Aşağıdakileri içeren bu yazılımın ve bağımlı yazılımın indirme adresi:

  • İkili paket:
  • epel adresi: https://mirrors.ustc.edu.cn/epel//7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

2.2 Bağımlılık paketi

RedHat sistem bağımlılık paketi

yum install -y openssl zlib pcre

Ubuntu sistem bağımlılıkları

  • Yüklemek gcc g ++ Bağımlı kitaplıklar
sudo apt-get install build-essential sudo apt-get install libtool
  • Yüklemek pcre Bağımlı kitaplık (
sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev
  • Yüklemek zlib Bağımlı kitaplık (
sudo apt-get install zlib1g-dev

2.3 nginx'i kurun

Çevrimiçi kurulum

Önce epl kaynağını kurun (yukarıdaki epl adresine bakın) ve ardından çalıştırın

sudo apt-get install nginx

Derleyin ve kurun

Aşağıdaki örnekte, / usr / local / nginx dizinine Nginx 1.14.1 kuruyoruz.

  • Yazılımı indirin
wget
  • Yazılımı aç
tar -zxvf nginx-1.14.1.tar.gz
  • Açılmış dizini girin
cd nginx-1.14.1
  • Yapılandırma
./configure --prefix = / usr / local / nginx
  • Derleyin ve kurun
kurmak yap

2.4 Başlatma

  • Çevrimiçi kaynak YUM kurulumu
systemctl start nginx # start service systemctl stop nginx # stop service systemctl yeniden nginx # yeniden başlatma hizmeti
  • İkili paket kurulumuna nasıl başlanır
sudo / usr / local / nginx / sbin / nginx -c /usr/local/nginx/conf/nginx.conf

Not: -c, yapılandırma dosyasının yolunu belirtir.Eğer eklenmezse, nginx yapılandırma dosyasını otomatik olarak varsayılan yolla yükler.Yardım komutunu -h aracılığıyla görüntüleyebilirsiniz.

2.5 Doğrulama

Bu adımın yürütülmesi hizmeti başarıyla başlatabilir.

Arka plan işleminin başlatılıp başlatılmadığını kontrol edin ps -ef | grer nginx Dinleme bağlantı noktasının etkin olup olmadığını kontrol edin ss -luntp | grep nginx

Ardından, başlatmanın başarılı olduğunu onaylayın ve aşağıdakileri görmek için doğrudan http: // localhost adresini ziyaret edin:

Ayrıntılı Nginx yapılandırma dosyası

Nginx'in varsayılan yapılandırma dosyası nginx.conf'tur, birini kopyalayıp yedekleyebilir ve ardından ilgili işlemi yapabiliriz. Yapılandırma dosyası yapısı şekilde gösterilmektedir:

Aşağıdakiler açıklamalı bir yapılandırma dosyasıdır, istediğiniz işlevleri kolayca yapılandırabilirsiniz.

# Kullanıcıyı çalıştırın, varsayılan nginx'tir, ayarlanamaz kullanıcı hiç kimse; #nginx işlemi, genellikle aynı sayıda cpu çekirdeğine ayarlanır işçi_işlemleri 1; # Hata günlüğü saklama dizini error_log günlükleri / error.log; error_log günlükleri / error.log bildirimi; error_log günlükleri / error.log bilgisi; Genel hata günlüğü tanım türü, #Process pid depolama konumu #pid günlükleri / nginx.pid; Bir nginx işlemi tarafından açılan maksimum dosya tanımlayıcı sayısı. Teorik değer, maksimum açık dosya sayısının (sistem değeri ulimit -n) nginx işlemlerinin sayısına bölünmesi olmalıdır, ancak nginx tahsis istekleri tek tip değildir, bu nedenle ulimit -n değerinin kullanılması önerilir tutarlı olun. # Çalışma modu ve maksimum bağlantı sayısı Etkinlikler { worker_connections 1024; # Tek bir arka plan çalışan işlemi için maksimum eşzamanlı bağlantı sayısı } #Set http sunucusu mime.types dahil; # Dosya uzantısı ve dosya türü eşleme tablosu default_type application / octet-stream; #Default dosya türü #charset utf-8; # Varsayılan kodlama server_names_hash_bucket_size 128; #Sunucu adının karma tablo boyutu client_header_buffer_size 32k; #Upload dosya boyutu sınırı large_client_header_buffers 464k; # İstek arabelleğini ayarla client_max_body_size 8m; #İstek gecikmesini ayarla dosya gönderme açık; # Etkin dosya aktarım modunu etkinleştir. 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 dengelemek için kapalı olarak ayarlanabilir Ve ağ G / Ç 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. autoindex açık; #Open dizin listesi erişimi, uygun indirme sunucusu, varsayılan olarak kapalıdır. tcp_nopush on; #Ağ tıkanıklığını önleyin tcp_nodelay on; #Ağ tıkanıklığını önleyin keepalive_timeout 120; # Uzun bağlantı zaman aşımı, saniye cinsinden # 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_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 464k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; # Verimli iletim modunu etkinleştirin dosya gönder; # Tcp_nopush parametresinin etkinleştirilmesi, httpresponse başlığının ve dosyanın başlangıcının tek bir dosyada yayınlanmasına olanak tanır. Olumlu etki, ağ mesajı segmentlerinin sayısını azaltmaktır tcp_nopush açık; #gzipModule Ayarları gzip açık; # gzip sıkıştırma çıktısını etkinleştir gzip_min_length 1k; # Minimum sıkıştırılmış dosya boyutu gzip_buffers 416k; # sıkıştırma arabelleği gzip_http_version 1.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_level 2; #sıkıştırma düzeyi gzip_types metin / düz uygulama / x-javascript metin / css uygulaması / xml; # Sıkıştırma türü, text / html varsayılan olarak zaten dahil edilmiştir, bu nedenle tekrar yazmaya gerek yoktur, bununla ilgili bir sorun olmayacaktır, ancak bir uyarı olacaktır. gzip_vary on; #limit_zone crawler $ binary_remote_addr 10m; # IP bağlantılarının sayısı sınırını açarken gereklidir upstream blog.ha97.com { #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 ve ağırlık ne kadar yüksek olursa atanma olasılığı o kadar büyük olur. sunucu 192.168.80.121:80 ağırlık = 3; sunucu 192.168.80.122:80 ağırlık = 2; sunucu 192.168.80.123:80 ağırlık = 3; }

Sanal ana bilgisayar yapılandırması

sunucu { 80 dinle; # İzleme bağlantı noktası Sunucu_adı aa.cn www.aa.cn; #server_name end # Boşluklarla ayrılmış birden fazla alan adı olabilir index index.html index.htm index.php; # Ana sayfaya erişimi ayarla Set $ subdomain ''; # Bağlama dizini, ikinci düzey alan adı bbb.aa.com kök dizini / bbb klasörüdür eğer ($ ana bilgisayar ~ * "(?: (\ w + \.) {0,}) (\ b (?! www \ b) \ w +) \. \ b (?! (com | org | gov | net | cn) \ b) \ w + \. + ") {$ alt alan adını ayarla" / $ 2 ";} root /home/wwwroot/aa.cn/web$subdomain;# erişim alan adı ve dizini dahil rewrite / dedecms.conf; #rewrite end # Diğer yapılandırma dosyalarını yükle konum ~. *. (php | php5)? $ { Fastcgi_pass 127.0.0.1:9000; Fastcgi_index index.php; Fastcgi.conf'u ekleyin; } # Resim önbellek süresi ayarı konum ~. *. (gif | jpg | jpeg | png | bmp | swf) $ { 10d'de sona eriyor; } #JS ve CSS önbellek süresi ayarları konum ~. *. (js | css)? $ { 1 saat sona erer; } }

Günlük biçimi ayarı

log_format erişimi '$ remote_addr- $ remote_user "$ istek"' '$ status $ 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 /var/log/nginx/ha97access.log erişimi;

"/" İçin ters proxy'yi etkinleştirin

yer / { proxy_pass proxy_redirect kapalı; proxy_set_header X-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_header X-Yönlendirilmiş-$ proxy_add_x_forwarded_for için; # Aşağıdakiler, isteğe bağlı bazı ters proxy yapılandırmalarıdır. proxy_set_header Ana Bilgisayar $ ana bilgisayar; client_max_body_size 10m; # İstemci tarafından izin verilen maksimum tek dosya baytı sayısı client_body_buffer_size 128k; # İstemciyi arabelleğe almak için arabellek aracısı tarafından istenen maksimum bayt sayısı, proxy_connect_timeout 90; #nginx, arka uç sunucu zaman aşımı süresine bağlanır (proxy bağlantı zaman aşımı) proxy_send_timeout 90; # Arka uç sunucu veri dönüş süresi (Proxy gönderme zaman aşımı) proxy_read_timeout 90; # Bağlantı başarılı olduktan sonra, arka uç sunucu yanıt süresi (proxy alma zaman aşımı) proxy_buffer_size 4k; # Kullanıcı başlığı bilgilerini kaydetmek için proxy sunucusunun (nginx) arabellek boyutunu ayarlayın proxy_buffers 432k; #proxy_buffers arabellek, ortalama web sayfası 32k'nin altında ayarlanmış proxy_busy_buffers_size 64k; # Yüksek yük altında tampon boyutu (proxy_buffers * 2) proxy_temp_file_write_size 64k; # Bu değerden daha büyük olan önbellek klasörü boyutunu ayarlayın, yukarı akış sunucusundan yüklenecektir }

Nginx durumunu görüntülemek için adresi ayarlayın

location / NginxStatus { stub_status açık; erişim_ günlüğü; auth_basic "NginxStatus"; auth_basic_user_file conf / htpasswd; #Htpasswd dosyasının içeriği, Apache tarafından sağlanan htpasswd aracı kullanılarak oluşturulabilir. } # 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_header Ana Bilgisayar $ ana bilgisayar; proxy_set_header X-Gerçek-IP $ remote_addr; proxy_set_header X-Yönlendirilmiş-$ proxy_add_x_forwarded_for için; proxy_pass } # Tüm statik dosyalar, tomcat veya resin olmadan nginx tarafından doğrudan okunur konum ~. *. (htm | html | gif | jpg | jpeg | png | bmp | swf | ioc | rar | zip | txt | flv | mid | doc | ppt | pdf | xls | mp3 | wma) $ {15 gün sona eriyor;} konum ~. *. (js | css)? $ {1 saat sona eriyor;} }

Pratik uygulama

Uygulama 1: Ters proxy'yi yapılandırın

Ters proxy, Nginx'in en çok kullanılan özelliği olmalıdır. Basit bir ifadeyle, ters proxy, gerçek sunucuya harici ağ tarafından doğrudan erişilemediği anlamına gelir, bu nedenle bir proxy sunucusu gereklidir.Proxy sunucusuna harici ağdan erişilebilir ve gerçek sunucu ile aynı ağ ortamında yer alır.Tabii ki aynı olabilir. Sunucu, bağlantı noktası farklı.

Ters proxy kodunun basit uygulaması

server { 80 dinle; server_name localhost; client_max_body_size 1024M; yer / { proxy_pass http: // localhost: 8080; proxy_set_header Ana Bilgisayar $ host: $ server_port; } }

Yapılandırma dosyasını kaydettikten sonra Nginx'i başlatın, böylece localhost'u ziyaret ettiğimizde, localhost'u ziyaret etmekle eşdeğer: 8080

Uygulama 2: Yük dengelemeyi yapılandırın

Yük dengeleme aynı zamanda Nginx'in yaygın olarak kullanılan bir işlevidir.Yük dengeleme, işlenmek üzere trafiği birden çok işlem birimine dağıtmak anlamına gelir. Basitçe ifade etmek gerekirse, iki sunucu varsa, istekleri kurallara göre işlenmek üzere belirlenmiş sunuculara rastgele dağıtabiliriz Yük dengeleme yapılandırması genellikle aynı anda ters proxy yapılandırmasını gerektirir ve yük dengelemeye ters proxy atlar.

  • Ortak strateji 1: RR (varsayılan)

Her istek, farklı arka uç sunuculara kronolojik sırayla tek tek tahsis edilir.Arka uç sunucusu (bağlantı noktası) çalışmıyorsa, otomatik olarak kaldırılabilir.

Basit konfigürasyon

upstream test { sunucu localhost: 8080; sunucu localhost: 8081; } server { 81 dinle; server_name localhost; client_max_body_size 1024M; yer / { proxy_pass http: // test; proxy_set_header Ana Bilgisayar $ host: $ server_port; } }
  • Ortak strateji iki: ağırlık

Yoklama ağırlığını belirtin Ağırlık, arka uç sunucu performansı eşit olmadığında kullanılan erişim oranıyla orantılıdır. Örneğin

upstream test { sunucu localhost: 8080 ağırlık = 8; sunucu localhost: 8081 ağırlık = 2; }

Sonra 10 kez, genellikle sadece 2 kez 8081'i ziyaret edecek ve 8 kez 8080'i ziyaret edecek.

Uygulama 3: Dinamik ve statik ayırma

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

upstream test { sunucu localhost: 8080; sunucu localhost: 8081; } server { 80 dinle; server_name localhost; yer / { kök e: wwwroot; index index.html; } # Tüm statik istekler nginx tarafından işlenir ve depolama dizini html'dir konum ~. (gif | jpg | jpeg | png | bmp | swf | css | js) $ { kök e: wwwroot; } # Tüm dinamik istekler işlenmek üzere tomcat'e iletilir konum ~. (jsp | do) $ { proxy_pass http: // test; } error_page 500502503504 /50x.html; location = /50x.html { kök e: wwwroot; } }

Bu şekilde, wwwroot dizinine HTML, pictures, css ve js koyabiliriz ve tomcat yalnızca jsp ve istekleri işlemekten sorumludur.

"Dedektif Çin Mahallesi 2" nin üç izlenimi: Son katil, gerçek katil olmayabilir
önceki
Biri bana Daniel Wu'nun neden tuğlayla bile bu kadar yakışıklı olabileceğini söyleyebilir mi?
Sonraki
9 Mayıs oyuncu kutlamasında yeni Tianlong Babu canlı yayında 4 sır açıklandı
Zhang Yinin en önemli 8 film çalışması: "Kızıldeniz Operasyonu" en yüksek gişeye sahip olsa da en iyisi olması gerekmez
Döviz kuru garantisi, döviz rezervi garantisi veya garanti fiyatı?
Bai Baihe Gişe Ofisi: Toplam değer Wu Jing ve Wang Baoqiang gibi birinci kademe erkek yıldızları aşıyor ve dokuz film 100 milyonu aşıyor
Kagemusha dosyaları silmiyor ve paylaşım ekonomisinin resmi lansmanı süper havalı
2019 Sevgililer Günü'nde programcılar sevgi konusunda çok gösterişli ~
Yılın en utanç verici romantizmi Su Yan Tanrıçası ve Wang Lichuan mürettebatla çarpıştı
Çin Bankacılık Düzenleme Komisyonu: "sanal para birimi" ve "blok zinciri" adına yasadışı fon toplama riskini önleme
Wang Baoqiang Gişesi: "Dedektif Chinatown 2" de 1 Numara, "Wolf Warrior 2" den daha fazla
Her erkeğin sabit diskinde böyle bir dram olmalı
Tony Leung'un anakara gişe listesi: "Monster Catch 2" kesinlikle birinci, ikinci ve üçüncü, biraz beklenmedik
MapleStory 2 rahip pratik deneyimi, ekipman mücevher seçimi ve kopya artı puanları
To Top