Giunsa ang Pagkonektar sa NGINX sa PHP-FPM Gamit ang UNIX o TCP/IP Socket


Ang NGINX web server (isip reverse proxy) nagsilbi sa mga aplikasyon sa PHP pinaagi sa FastCGI protocol (isip backend application server). Ang NGINX naggamit sa PHP-FPM (FastCGI Process Manager), usa ka alternatibo nga PHP FastCGI nga pagpatuman nga nagdagan sa background isip usa ka daemon, nga naminaw sa mga hangyo sa CGI. Kini adunay dugang nga mga bahin nga gidisenyo alang sa pagpaandar sa bug-at nga mga website o mga aplikasyon sa web, apan kini magamit alang sa mga site sa bisan unsang gidak-on.

Dili lamang ang PHP-FPM ang nagsuporta sa pag-configure sa FastCGI resource pool, apan nagpauswag usab kini sa kadaghanan sa mga internal nga FastCGI ug nagdugang sa pagreport sa sayup, pagtapos sa script, ug daghan pa. Gipakita niini ang pagdemonyo sa PHP, pagdumala sa proseso, usa ka dinamikong gidaghanon sa mga proseso diin mahimong moabut ang mga hangyo, header sa sayup, gipadali nga suporta sa pag-upload, ug uban pa.

Aron dawaton ang mga hangyo sa FastCGI gikan sa NGINX, ang PHP-FPM mahimong maminaw sa TCP/IP socket o UNIX domain socket. Bisan asa nga adres ang imong pilion nga gamiton mao ang gigamit sa NGINX aron makonektar (proxy requests) sa PHP-FPM, gamit ang fastcgi_pass nga direktiba.

Kini nga giya nagpatin-aw unsaon pag-configure ang NGINX sa server sa mga aplikasyon sa PHP gamit ang PHP-FPM. Gihubit niini kung kanus-a gamiton ang TCP/IP socket o UNIX domain socket aron makonektar ang NGINX sa PHP-FPM ug ngano.

Kini nga giya nagtuo nga ikaw adunay NGINX ug PHP-FPM nga na-install sa imong Linux system, kung dili, tan-awa:

  • Unsaon Pag-instalar sa LEMP Server sa CentOS 8
  • Unsaon Pag-instalar sa LEMP stack PhpMyAdmin sa Ubuntu 20.04 Server
  • Unsaon Pag-instalar sa NGINX, MySQL/MariaDB, ug PHP sa RHEL 8
  • Unsaon Pag-instalar sa LEMP sa Debian 10 Server

Ang UNIX domain (o IPC) nga mga socket usa ka paagi sa inter-process communication (IPC) nga nagtugot sa episyente nga pagbayloay sa datos tali sa mga proseso nga nagdagan sa samang operating system samtang ang TCP/IP (o Internet Domain) nga mga socket nagtugot sa mga proseso sa pagkomunikar sa usa ka network.

Dili sama sa usa ka TCP/IP socket nga nagpaila sa usa ka server pinaagi sa usa ka IP address ug port (e.g. 127.0.0.1:9000), mahimo nimong ibugkos ang usa ka server sa usa ka UNIX domain socket gamit ang file pathname (e.g /run/php-fpm/www. sock), nga makita sa filesystem.

Ang UNIX domain socket usa ka espesyal nga tipo sa file - ang mga permiso sa file ug direktoryo magamit niini (sama sa kaso sa bisan unsang lain nga tipo sa UNIX file) ug magamit aron mapugngan kung unsang mga proseso sa host ang makabasa ug makasulat sa file, (ug sa ingon nakigsulti sa backend server).

Niining paagiha, luwas ang UNIX domain socket tungod kay ang mga proseso lamang sa lokal nga host ang makagamit niini. Ang usa ka TCP/IP socket mahimong ma-expose sa internet nga nagbutang ug usa ka peligro sa seguridad gawas kung ang dugang nga mga lakang sa seguridad sama sa usa ka firewall gipatuman.

Importante, ang paggamit sa UNIX domain socket dili pareho sa paggamit sa TCP/IP socket bahin sa performance, daghang mga pagsulay ug benchmarks ang napamatud-an nga UNIX domain sockets nga mas paspas. Ang nag-unang disbentaha sa UNIX domain sockets mao nga sila dili kaayo scalable, sila nagsuporta lamang sa inter-proseso nga komunikasyon sulod sa sama nga operating system (OS).

Mahimo nimong i-configure ang adres nga gipamati sa PHP-FPM sa usa ka file sa pag-configure sa pool sa kapanguhaan. Timan-i nga sa PHP-FPM, mahimo nimong ipadagan ang daghang mga pool sa mga proseso nga adunay lainlaing mga setting. Ang default pool gitawag og www.

Ang lokasyon sa resource pool configuration file nagdepende sa paagi sa PHP ug PHP-FPM nga na-install sa Linux system (kon default/solo nga bersyon o daghang bersyon nga dungan).

Pananglitan, sa CentOS 8, nga adunay usa ka bersyon, ang tanang PHP configuration files anaa sa /etc directory ug ang default PHP-FPM pool (www) configuration file mao ang /etc/php-fpm.d/www.conf:

Aron ilista ang tanang mga file sa configuration sa PHP, gamita ang mosunod nga ls command.

# ls /etc/php*

Sa Ubuntu 20.04, ang PHP configuration files nahimutang sa /etc/php// directory ug ang default PHP-FPM pool (www) configuration file mao ang /etc/php//fpm/pool.d/www.conf:

$ ls /etc/php/7.4/

Pag-configure sa PHP-FPM aron Maminaw sa UNIX Domain Socket

Aron ma-configure ang PHP-FPM aron maminaw sa UNIX domain socket, ablihi ang imong default PHP-FPM pool configuration file, gamit ang imong paborito nga text editor.

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

Dayon pangitaa ang direktiba sa pagpamati ug ibutang kini sa file pathname sa UNIX domain socket ingon sa mosunod. Timan-i nga kadaghanan sa mga instalasyon naggamit ug UNIX domain socket sa default.

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

Kung mogamit ka ug UNIX domain socket, kinahanglan nimo nga itakda ang angay nga pagbasa/pagsulat nga mga permiso para sa file, aron tugutan ang mga koneksyon gikan sa NGINX web server. Sa kasagaran, ang NGINX midagan isip user ug group nginx sa CentOS/RHEL/Fedora ug www-data sa Ubuntu ug Debian.

Busa, pangitaa ang listen.owner ug listen.group nga mga parametro ug itakda kini sumala niana. Usab, itakda ang mode sa 0660 gamit ang parameter nga listen.mode.

------------- 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

Timan-i nga kung ang mga permiso sa UNIX domain socket file wala gitakda sa husto, ang NGINX mahimong magbalik og dili maayo nga gateway error.

Pag-configure sa PHP-FPM aron Maminaw sa TCP/IP Socket

Bisan tuod ang UNIX domain socket mas paspas kay sa TCP/IP socket, ang kanhi dili kaayo scalable, tungod kay kini makasuporta lamang sa inter-process nga komunikasyon sa samang OS. Kung ang NGINX ug ang backend application server (PHP-FPM) nagdagan sa lainlaing mga sistema, kinahanglan nimo nga i-configure ang PHP-FPM aron maminaw sa TCP/IP socket para sa mga koneksyon.

Sa PHP-FPM pool configuration file, itakda ang listen adres sama sa mosunod. Siguruha nga ang pantalan nga imong gipili wala gigamit sa lain nga proseso o serbisyo sa parehas nga sistema.

listen = 127.0.0.1:3000

Pag-configure sa NGINX aron magtrabaho kauban ang PHP-FPM Application Server

Kung na-configure na nimo ang adres nga gipamatian sa PHP-FPM, kinahanglan nimo nga i-configure ang NGINX aron hangyoon kini nga proxy pinaagi sa kana nga adres, gamit ang parameter sa pag-configure sa fastcgi_pass, sa usa ka file sa pagsumpo sa block sa virtual server.

Pananglitan, kung ang configuration file para sa imong website mao ang /etc/nginx/conf.d/example.com.conf, ablihi kini para sa pag-edit.

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

Pangitaa ang lokasyon block para sa pagproseso sa .php nga mga file ug itakda ang fastcgi_pass nga parametro sama sa mosunod, kon imong gi-configure ang PHP-FPM aron maminaw sa usa ka UNIX socket sa domain.

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

O paggamit ug TCP/IP address kon imong gi-configure ang PHP-FPM aron maminaw sa TCP/IP socket. Kung ang backend application server (PHP-FPM) nagdagan sa lahi nga server (ilisan ang 10.42.0.10 sa IP address sa makina diin ang PHP-FPM FastCGI server nagdagan).

fastcgi_pass  10.42.0.10:3000;

Importante: Sa CentOS 8, ang PHP-FPM gihubit isip upstream server sa /etc/nginx/conf.d/php-fpm.conf file, sulod sa upstream block, nga adunay ngalan nga php-fpm.

Makahimo ka og mga pagbag-o dinhi sumala sa depende sa adres nga PHP-FPM nga gi-configure aron paminawon, sa pool configuration file. Ang default configuration nagpunting sa usa ka UNIX domain socket.

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

ug sa server block file sa imong site, ibutang lang ang fastcgi_pass parameter sama sa gipakita.

fastcgi_pass php-fpm;

Human sa paghimo og mga kausaban sa PHP-FPM ug NGINX nga mga configuration, susiha ang ilang configuration syntax alang sa tukma sama sa mosunod.

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

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

Samtang ang command output nagpakita sa nag-unang configuration file lamang, ang tanan nga uban nga configuration files gilakip ug gisusi usab.

Sunod, kinahanglan nimo nga i-restart ang duha nga mga serbisyo aron magamit ang mga pagbag-o, gamit ang systemctl command.

------------- 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

Kung adunay ka mga sayup, mahimo nimong susihon ang NGINX ug PHP-FPM log files gamit ang cat command.

------------- 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

Mao ra kana ang among naa kanimo. Ang seksyon sa komento sa ubos mahimong magamit sa pagpangutana. Para sa dugang nga impormasyon, tan-awa ang PHP-FPM nga dokumentasyon.