UNIX veya TCP/IP Soketi Kullanarak NGINX'i PHP-FPM'ye Bağlama


NGINX web sunucusu (ters proxy olarak), FastCGI protokolü (arka uç uygulama sunucusu olarak) aracılığıyla PHP uygulamalarına hizmet eder. NGINX, arka planda bir arka plan programı olarak çalışan ve 'yi dinleyen alternatif bir PHP FastCGI uygulaması olan PHP-FPM'yi (FastCGI Süreç Yöneticisi) kullanır. >CGI istekleri. Ağır yüklü web sitelerine veya web uygulamalarına güç sağlamak için tasarlanmış ekstra özelliklerle birlikte gelir, ancak her boyuttaki site için kullanılabilir.

PHP-FPM yalnızca FastCGI kaynak havuzlarının yapılandırmasını desteklemekle kalmaz, aynı zamanda FastCGI dahili bileşenlerinin çoğunu geliştirir ve hata raporlamayı, komut dosyalarını artırır. fesih ve çok daha fazlası. PHP'nin şeytanlaştırılması, süreç yönetimi, isteklerin gelebileceği dinamik sayıda süreç, hata başlığı, hızlandırılmış yükleme desteği ve daha fazlasını içerir.

NGINX'ten gelen FastCGI isteklerini kabul etmek için PHP-FPM, bir TCP/IP soketinde veya UNIX alanında dinleyebilir priz. Hangi adresi kullanmayı seçerseniz seçin, NGINX, fastcgi_pass yönergesini kullanarak PHP-FPM'ye bağlanmak (proxy istekleri) için kullanır.

Bu kılavuzda NGINX'in PHP-FPM kullanılarak sunucu PHP uygulamalarına nasıl yapılandırılacağı açıklanmaktadır. NGINX'i PHP-FPM'ye bağlamak için ne zaman bir TCP/IP soketinin veya UNIX etki alanı soketinin kullanılacağını ve bunun nedenini açıklar.

Bu kılavuz, Linux sisteminizde NGINX ve PHP-FPM'nin kurulu olduğunu varsaymaktadır; aksi halde, bkz.:

  • LEMP Sunucusu CentOS 8'e Nasıl Kurulur
  • Ubuntu 20.04 Sunucusunda LEMP yığını PhpMyAdmin nasıl kurulur
  • RHEL 8'e NGINX, MySQL/MariaDB ve PHP Nasıl Kurulur
  • LEMP'nin Debian 10 Sunucusuna Kurulumu

Ne Kullanmalıyım: UNIX Etki Alanı Soketi mi yoksa TCP/IP Soketi mi?

UNIX etki alanı (veya IPC) yuvaları, TCP sırasında aynı işletim sistemi üzerinde çalışan işlemler arasında verimli veri alışverişine olanak tanıyan bir işlemler arası iletişim (IPC) aracıdır. /IP (veya İnternet Alanı) yuvaları, işlemlerin bir ağ üzerinden iletişim kurmasına olanak tanır.

Bir sunucuyu IP adresi ve bağlantı noktasıyla (ör. 127.0.0.1:9000) tanımlayan TCP/IP soketinin aksine, bir sunucuyu UNIX etki alanı soketine aşağıdakileri kullanarak bağlayabilirsiniz: dosya sisteminde görünen bir dosya yolu adı (örneğin /run/php-fpm/www.sock).

UNIX etki alanı soketi özel bir dosya türüdür; dosya ve dizin izinleri ona uygulanır (diğer UNIX dosyası türlerinde olduğu gibi) ve ana bilgisayardaki hangi işlemlerin dosyayı okuyabileceğini ve yazabileceğini kısıtlamak için kullanılabilir. (ve böylece arka uç sunucusuyla iletişim kurun).

Bu şekilde, UNIX etki alanı soketi güvenlidir çünkü yalnızca yerel ana bilgisayardaki işlemler onu kullanabilir. Güvenlik duvarı gibi ekstra güvenlik önlemleri uygulanmadığı sürece TCP/IP soketi internete maruz kalabilir ve güvenlik riski oluşturabilir.

Daha da önemlisi, UNIX etki alanı soketi kullanmak, performans açısından TCP/IP soketi kullanmakla aynı şey değildir; çeşitli testler ve karşılaştırmalar, UNIX etki alanı soketlerinin daha hızlı olduğunu kanıtlamıştır. UNIX etki alanı yuvalarının ana dezavantajı, daha az ölçeklenebilir olmaları ve yalnızca aynı işletim sistemi (OS) içindeki işlemler arası iletişimi desteklemeleridir.

PHP-FPM Dinleme Adresini Nerede Yapılandırabilirim?

Bir kaynak havuzu yapılandırma dosyasında PHP-FPM'nin dinlediği adresi yapılandırabilirsiniz. PHP-FPM ile farklı ayarlarla çeşitli işlem havuzlarını çalıştırabileceğinizi unutmayın. Varsayılan havuza www adı verilir.

Kaynak havuzu yapılandırma dosyasının konumu, PHP ve PHP-FPM'nin bir Linux sistemine yüklenme şekline bağlıdır (varsayılan/tek sürüm veya aynı anda birden fazla sürüm olması fark etmez) .

Örneğin, tek sürümlü CentOS 8'de, tüm PHP yapılandırma dosyaları /etc dizininde ve varsayılan PHP-FPM dizininde bulunur. havuz (www) yapılandırma dosyası şu şekildedir: /etc/php-fpm.d/www.conf:

Tüm PHP yapılandırma dosyalarını listelemek için aşağıdaki ls komutunu kullanın.

ls /etc/php*

Ubuntu 20.04'te, PHP yapılandırma dosyaları /etc/php// dizininde ve varsayılan PHP-FPM dizininde bulunur. > havuz (www) yapılandırma dosyası: /etc/php//fpm/pool.d/www.conf:

ls /etc/php/7.4/

PHP-FPM'yi UNIX Etki Alanı Soketinde Dinleyecek Şekilde Yapılandırma

PHP-FPM'yi UNIX etki alanı soketini dinleyecek şekilde yapılandırmak için, favori metin düzenleyicinizi kullanarak varsayılan PHP-FPM havuz yapılandırma dosyanızı açın.

sudo vim /etc/php/7.4/fpm/pool.d/www.conf	#Ubuntu/Debian
OR
vim /etc/php-fpm.d/www.conf			#CentOS/RHEL/Fedora

Daha sonra listen direktifini arayın ve UNIX etki alanı soketinin dosya yol adına aşağıdaki gibi ayarlayın. Çoğu kurulumun varsayılan olarak bir UNIX etki alanı soketi kullandığını unutmayın.

listen = /run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
listen = /run/php-fpm/www.sock		#CentOS/RHEL/Fedora

UNIX etki alanı soketi kullanıyorsanız, NGINX web sunucusundan bağlantılara izin vermek için dosya için uygun okuma/yazma izinlerini de ayarlamanız gerekir. NGINX, varsayılan olarak CentOS/RHEL/Fedora'da kullanıcı ve grup nginx olarak ve Ubuntu'da www-data olarak çalışır. ve Debian.

Bu nedenle, listen.owner ve listen.group parametrelerini bulun ve bunlara göre ayarlayın. Ayrıca listen.mode parametresini kullanarak modu 0660 olarak ayarlayın.

------------- On Debian and Ubuntu -------------
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

------------- On CentOS/RHEL and Fedora  -------------
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

UNIX etki alanı soket dosyasındaki izinler doğru şekilde ayarlanmazsa NGINX'in hatalı ağ geçidi hatası verebileceğini unutmayın.

PHP-FPM'yi TCP/IP Soketinde Dinleyecek Şekilde Yapılandırma

UNIX etki alanı soketi TCP/IP soketinden daha hızlı olmasına rağmen, birincisi yalnızca aynı işletim sistemi üzerinde işlemler arası iletişimi destekleyebildiğinden daha az ölçeklenebilirdir. NGINX ve arka uç uygulama sunucusu (PHP-FPM) farklı sistemlerde çalışıyorsa, dinlemek için PHP-FPM'yi yapılandırmanız gerekecektir. bağlantılar için bir TCP/IP soketi.

PHP-FPM havuz yapılandırma dosyasında listen adresini aşağıdaki gibi ayarlayın. Seçtiğiniz bağlantı noktasının aynı sistemdeki başka bir işlem veya hizmet tarafından kullanılmadığından emin olun.

listen = 127.0.0.1:3000

NGINX'i PHP-FPM Uygulama Sunucusu ile Çalışacak Şekilde Yapılandırma

PHP-FPM'nin dinlediği adresi yapılandırdıktan sonra, fastcgi_pass'ı kullanarak bu adres aracılığıyla kendisine proxy isteği gönderecek NGINX'i yapılandırmanız gerekir. Bir sanal sunucu bloğu yapılandırma dosyasındaki yapılandırma parametresi.

Örneğin, web sitenizin yapılandırma dosyası /etc/nginx/conf.d/example.com.conf ise düzenlemek için açın.

vim /etc/nginx/conf.d/example.com.conf 

.php dosyalarını işlemek için location bloğunu arayın ve PHP-FPM'yi UNIX'te dinleyecek şekilde yapılandırdıysanız fastcgi_pass parametresini aşağıdaki gibi ayarlayın. etki alanı soketi.

fastcgi_pass unix:/run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Veya PHP-FPM'yi bir TCP/IP yuvasını dinleyecek şekilde yapılandırdıysanız bir TCP/IP adresi kullanın. Arka uç uygulama sunucusu (PHP-FPM) ayrı bir sunucuda çalışıyorsa (10.42.0.10 yerine PHP-FPM FastCGI sunucusunun bulunduğu makinenin IP adresini yazın) çalışıyor).

fastcgi_pass  10.42.0.10:3000;

Önemli: CentOS 8'de, PHP-FPM, / dosyasında yukarı akış sunucusu olarak tanımlanır. etc/nginx/conf.d/php-fpm.conf dosyası, bir yukarı akış bloğu içinde, php-fpm adıyla.

Havuz yapılandırma dosyasında PHP-FPM'nin dinlemek üzere yapılandırıldığı adrese bağlı olarak burada uygun şekilde değişiklik yapabilirsiniz. Varsayılan yapılandırma bir UNIX etki alanı soketine işaret eder.

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

ve sitenizin sunucu blok dosyasında fastcgi_pass parametresini gösterildiği gibi ayarlamanız yeterlidir.

fastcgi_pass php-fpm;

PHP-FPM ve NGINX yapılandırmalarında değişiklik yaptıktan sonra, yapılandırma sözdizimlerinin doğruluğunu aşağıdaki gibi kontrol edin.

------------- On Debian and Ubuntu -------------
sudo php-fpm -t
sudo nginx -t

------------- On CentOS/RHEL and Fedora  -------------
php-fpm -t
nginx -t

Komut çıktısı yalnızca ana konfigürasyon dosyasını gösterirken diğer tüm konfigürasyon dosyaları da dahil edilir ve kontrol edilir.

Daha sonra, değişiklikleri uygulamak için systemctl komutunu kullanarak iki hizmeti yeniden başlatmanız gerekir.

------------- On Debian and Ubuntu -------------
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora  -------------
systemctl restart nginx
systemctl restart php-fpm

Herhangi bir hata alırsanız cat komutunu kullanarak NGINX ve PHP-FPM günlük dosyalarını kontrol edebilirsiniz.

------------- On Debian and Ubuntu -------------
cat /var/log/nginx/error.log
cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora  -------------
cat /var/log/nginx/error.log
cat /var/log/php-fpm/www-error.log

Senin için elimizde olan tek şey buydu. Soru sormak için aşağıdaki yorum kısmını kullanabilirsiniz. Daha fazla bilgi için NGINX belgelerine ve PHP-FPM belgelerine bakın.