Nginx + php yürütme isteği ilkesini anlamak için bir makale-cgi, php-cgi, fastcgi, phpfpm

Genel Bakış

Nginx oynayan arkadaşlar cgi, php-cgi, fastcgi ve php-fpm'yi duymuş olmalılar Aralarındaki ilişki nedir? Nginx + php'nin istekleri nasıl yerine getirdiğini anlamanıza yardımcı olalım.

cgi protokolü

CGI bir programlama dili değildir. Web formları ve yazdığınız programlar arasındaki iletişim için bir protokoldür. Bu diller giriş ve çıkış bilgilerini alabildiği ve ortam değişkenlerini okuyabildiği sürece herhangi bir dilde bir CGI komut dosyası yazabilirsiniz. Bu nedenle, neredeyse tüm programlama dilleri bir CGI betiği yazabilir, örneğin: python (benim büyük python'umu önce koyun!), C ve hatta kabuk betikleri.

CGI, kullanıcı tarafından iletilen verileri bir k-v sözlüğüne dönüştüren bir iletişim protokolüdür. Bu sözlük yalnızca kullanıcı verilerini değil, aynı zamanda HTTP protokol parametrelerini de içerir. Yaptığı şey, verileri sabit bir yapı içinde düzenlemektir. CGI protokolüne uyan herhangi bir programın çağrılması uygundur! Ancak CGI, iletişimden (veri iletimi) sorumlu değildir İletişim, sunucu olan soket aracılığıyladır.Örneğin, yukarıdaki örnekte iletişim Apache üzerinden yapılır. Ardından, verileri sonraki veri işleme için CGI protokolüne uygun bir veri yapısına dönüştürmek için CGI komut dosyasını çağırın!

Kısacası cgi protokolü, web sunucusunu (nginx gibi), yani içerik dağıtım sunucusunun hangi verileri ve hangi formatı ilettiğini belirlemek için kullanılır.

php-cgi süreç yorumlayıcısı

php-cgi, php'nin cgi protokolü süreç yorumlayıcısıdır.Her başladığında php.ini dosyasını yüklemesi gerekir. > Yürütme ortamını başlatın- > İstek işleniyor > İçeriği web sunucusuna döndür- > Php-cgi işleminden çıkış süreci.

fastcgi protokolü

Fastcgi protokolü, cgi protokolünün verimliliğinin bir tamamlayıcısıdır. Esas olarak, bir istek geldiğinde bir cgi yorumlayıcı sürecini başlatma ihtiyacı için optimize edilmiştir. Artık cgi yorumlayıcı işleminin, bir web sunucusu isteği aldığında php'yi yeniden yüklemesine gerek yoktur. ini dosyası ve ilk yürütme ortamı.

php-fpm işlem yöneticisi

php-fpm, fastcgi protokolünün bir uygulamasıdır. Bir süreç yöneticisidir. Başlangıçta ana ve çalışan süreçleri içerir. Ana süreç bağlantı noktasını dinler ve web sunucusundan istekleri alır. Genellikle, birden fazla çalışan işlemi vardır ve her çalışan işlemin bir cgi'si vardır. Php kodunu yürütmek için kullanılan işlem yorumlayıcısı.

Php-fpm için iki yürütme yöntemi vardır.Apache gibi, işlemlerinin sayısı da ayarlara göre dinamik ve statik olarak bölünebilir.Birincisi, belirli bir sayıda php-fpm işlemini artırmadan veya azaltmadan doğrudan başlatmaktır; diğeri Başlangıçta belirli sayıda php-fpm işlemi başlatmaktır.İstek hacmi büyüdüğünde, php-fpm işlemlerinin sayısı dinamik olarak üst sınıra yükseltilir ve boşta kalan işlemlerin sayısı otomatik olarak alt sınıra bırakılır.

Bu iki farklı yürütme yöntemi, sunucunun gerçek ihtiyaçlarına göre ayarlanabilir.

php başlangıcı ve çalışma prensibi

Phpfpm başlatıldığında, ana süreci başlatacak, php.ini dosyasını yükleyecek, yürütme ortamını başlatacak ve birden çok çalışan işlemi başlatacaktır. Her istek geldiğinde, istek işlenmek üzere çalışan sürece aktarılır

php düzgün yeniden başlatma ilkesi

Php.ini yapılandırması her değiştirilip yeniden başlatıldığında, yeni yapılandırmayı yüklemek için yeni bir çalışan işlem başlatılacak ve iş tamamlandıktan sonra önceden var olan süreç yok edilecek, böylece sorunsuz bir yeniden başlatma

Nginx nasıl çalışır?

Eğer nginx ve php işbirliği prensibini anlamak istiyorsanız, nginx konfigürasyon dosyasındaki sunucu kısmını da anlamanız gerekir.

server { 80 dinle; #Monitor bağlantı noktası 80, http talebini al server_name www.example.com; #Genel depolama URL'si, hangi öğenin yapılandırıldığını gösterir root / home / wwwroot / zensmall / public /; # Kodun saklandığı kök dizin adresi veya kod başlangıç girişi index index.php index.html; #Website varsayılan ana sayfası # İstenen web sitesinin URL'si konum öneki ile eşleştiğinde ve en uzun eşleşen dize yapılandırma öğesi olduğunda, dosyanın sırayla var olup olmadığını kontrol edin ve bulunan ilk dosyayı geri gönderin yer / { #try_files, sırayla dosyaların varlığını kontrol edin, bulunan ilk dosyayı iade edin # $ uri, istek parametreleri olmadan geçerli adresi temsil eder # $ sorgu_dizesi, istekte taşınan parametreleri temsil eder try_files $ uri $ uri / /index.php?$query_string; # $ uri dosyasını sırayla kontrol edin, eğer varsa, bulunan ilk dosyayı geri gönderin; eğer yoksa, /index.php adresini ziyaret edin $ query_string dahili istek, istek aşağıdaki konum isteğiyle yeniden eşleştirilecek } # Web sitesinin php dosyasını talep ederken, işleme için ters proxy'den php-fpm'ye çevirin konum ~ \ .php $ { fastcgi_params dahil; #Introduce fastcgi yapılandırma dosyasını fastcgi_pass 127.0.0.1:9000; # php fastcgi işlemi tarafından izlenen IP adresini ve bağlantı noktasını ayarlayın fastcgi_index index.php; # Ana sayfa dosyasını ayarlayın fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; # Komut dosyası isteğinin yolunu ayarlayın } }

Yukarıdaki sunucu yapılandırmasının genel anlamı şudur: nginx, 80 numaralı bağlantı noktasında bir url isteğini her dinlediğinde, url'yi konumla eşleştirecektir. / Kuralı eşleşirse, dahili bir istek /index.php?$query_string için bir dahili istek başlatmak üzere yeniden yönlendirilir ve ilgili konum yapılandırma kuralı, isteği 9000 numaralı bağlantı noktasında php-fpm dinleme ana sürecine gönderir.

sonuç olarak

En basit kullanıcı talep süreci aşağıda özetlenmiştir:

Kabaca şu şekildedir: Kullanıcı erişim alan adı > DNS çözümlemesi için alan adı > İlgili IP sunucusuna ve bağlantı noktasına talep > Nginx, ilgili bağlantı noktasının talebini izler. > Nginx, url'de konum eşleştirme gerçekleştirir > Kuralları eşleşen konum altında yürütün- > nginx, isteği php- > Php-fpm'nin ana süreci nginx isteklerini dinler- > Ana işlem, isteği boşta kalan çalışan işlemlerinden birine atar - > Çalışan işlem, isteği yerine getirir. > Çalışan süreç yürütme sonucunu nginx- > Nginx sonucu kullanıcıya döndürür.

Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

Sivrisinekler bu yıl biraz panik içinde! Biri 100 şişe tuvalet suyuyla banyo yaptı
önceki
Tmall 618'e başka bir açıdan bakın: Tarım ürünleri canlı yayın odasına girdiğinde ne olacak?
Sonraki
E-ticaret işi Çin'e kapıldıktan sonra, Amazon ayağa kalkmak için bu numaraya güvenmek istedi
Oracle veritabanının mevcut oturumun / sürecin oturum kimliğini nasıl elde ettiğini ayrıntılı olarak açıklayın
Oracle veritabanı indeksinin kullanımını izlemek için pratik komut dosyası
Oracle, SQL Server, MySQL ve PostgreSQL veritabanlarının avantaj ve dezavantajlarının detaylı analizi
Türük neden Ali'nin kalçasını sıkıca tutuyor?
Jingxian County: Geleneksel Kauçuk ve Plastik Ürünler Sektörü Yeşil Yeni Yol Yaratıyor
Zhang Bo: Didi "Demir Adam" Cheng Wei "Hediye"
MySQL veritabanı deneyi-dikey bölme ve yatay bölme nedir?
Oracle deneyi - dört Oracle sayı yuvarlama işlevini tartışın
Carrefour, Suning'e 4,8 milyar sattı ve batan çokuluslu şirketlerin hepsi aynı hatayı yaptı.
1200! Hebei "Üç Destek ve Bir Destek" kayıt olmak üzere, en son iş listesi
MySQL oturum kilidi bekleme ilişkisi prensibinin ayrıntılı açıklaması-4 temel tablo
To Top