ວິທີເຊື່ອມ NGINX ກັບ PHP-FPM ໂດຍໃຊ້ UNIX ຫຼື TCP/IP Socket


ເຄື່ອງແມ່ຂ່າຍເວັບໄຊຕ໌ NGINX (ເປັນຕົວແທນປ່ຽນແທນ) ໃຫ້ບໍລິການໂປແກຼມ PHP ຜ່ານໂປແກຼມໂປແກຼມ FastCGI (ເປັນໂປແກຼມໂປແກຼມໂປແກຼມ backend). NGINX ຈ້າງ PHP-FPM (FastCGI Process Manager), ການປະຕິບັດ PHP FastCGI ທາງເລືອກທີ່ເຮັດວຽກຢູ່ໃນພື້ນຫລັງເປັນ daemon, ຟັງ ຄຳ ຮ້ອງຂໍຂອງ CGI. ມັນມາພ້ອມກັບຄຸນລັກສະນະພິເສດທີ່ຖືກອອກແບບມາ ສຳ ລັບໃຫ້ໃຊ້ເວບໄຊທ໌ທີ່ມີພະລັງງານ ໜັກ ຫລືໂປແກຼມ ນຳ ໃຊ້ເວັບຕ່າງໆ, ແຕ່ມັນສາມາດໃຊ້ ສຳ ລັບເວັບໄຊຕ່າງໆທີ່ມີຂະ ໜາດ ໃດກໍ່ໄດ້.

ບໍ່ພຽງແຕ່ PHP-FPM ສະ ໜັບ ສະ ໜູນ ການຕັ້ງຄ່າສະລອຍນ້ ຳ ຂອງແຫລ່ງຊັບພະຍາກອນ FastCGI, ແຕ່ມັນຍັງປັບປຸງຫລາຍພາຍໃນຂອງ FastCGI ພາຍໃນແລະເພີ່ມການລາຍງານຂໍ້ຜິດພາດ, ການສິ້ນສຸດອັກສອນ, ແລະອື່ນໆອີກຫລາຍຢ່າງ. ມັນມີໂປແກຼມ daemonization ຂອງ PHP, ການຈັດການກັບຂະບວນການ, ຈຳ ນວນຂະບວນການແບບເຄື່ອນໄຫວເຊິ່ງ ຄຳ ຮ້ອງຂໍສາມາດມາຈາກ, ຫົວຂໍ້ຜິດພາດ, ການສະ ໜັບ ສະ ໜູນ ການອັບໂຫລດແບບເລັ່ງແລະອື່ນໆ.

ເພື່ອຍອມຮັບເອົາ ຄຳ ຮ້ອງຂໍ FastCGI ຈາກ NGINX, PHP-FPM ສາມາດຟັງຢູ່ໃນເຕົ້າຮັບ TCP/IP ຫຼືເຕົ້າຮັບໂດເມນ UNIX ໄດ້. ທີ່ຢູ່ທີ່ທ່ານເລືອກໃຊ້ແມ່ນສິ່ງທີ່ NGINX ໃຊ້ເພື່ອເຊື່ອມຕໍ່ (ການຮ້ອງຂໍຕົວແທນ) ກັບ PHP-FPM, ໂດຍໃຊ້ ຄຳ ສັ່ງ fastcgi_pass .

ຄູ່ມືນີ້ອະທິບາຍວິທີການຕັ້ງຄ່າ NGINX ກັບ server server applications ໂດຍໃຊ້ PHP-FPM. ມັນອະທິບາຍເວລາທີ່ຈະໃຊ້ເຕົ້າຮັບ TCP/IP ຫຼື socket ໂດເມນ UNIX ເພື່ອເຊື່ອມ NGINX ກັບ PHP-FPM ແລະຍ້ອນຫຍັງ.

ຄູ່ມືນີ້ຄາດວ່າທ່ານໄດ້ຕິດຕັ້ງ NGINX ແລະ PHP-FPM ໃນລະບົບ Linux ຂອງທ່ານ, ຖ້າບໍ່ດັ່ງນັ້ນ, ເບິ່ງ:

  • ວິທີການຕິດຕັ້ງ LEMP Server ໃນ CentOS 8
  • ວິທີການຕິດຕັ້ງ LEMP stack PhpMyAdmin ໃນ Ubuntu 20.04 Server
  • ວິທີການຕິດຕັ້ງ NGINX, MySQL/MariaDB ແລະ PHP ໃນ RHEL 8
  • ວິທີການຕິດຕັ້ງ LEMP ໃນ Debian 10 Server

ເຕົ້າຮັບໂດເມນ UNIX (ຫຼື IPC) ແມ່ນວິທີການສື່ສານລະຫວ່າງຂະບວນການ (IPC) ທີ່ຊ່ວຍໃຫ້ການແລກປ່ຽນຂໍ້ມູນທີ່ມີປະສິດຕິພາບລະຫວ່າງຂະບວນການທີ່ເຮັດວຽກຢູ່ໃນລະບົບປະຕິບັດການດຽວກັນໃນຂະນະທີ່ເຕົ້າຮັບ TCP/IP (ຫລື Internet Domain) ຊ່ວຍໃຫ້ຂະບວນການສາມາດສື່ສານຜ່ານເຄືອຂ່າຍ.

ບໍ່ຄືກັບເຕົ້າຮັບ TCP/IP ທີ່ລະບຸເຊີຟເວີໂດຍທີ່ຢູ່ IP ແລະພອດ (ຕົວຢ່າງ 127.0.0.1:9000), ທ່ານສາມາດຜູກເຊີບເວີຢູ່ໃນໂດເມນ UNIX ໂດຍໃຊ້ຊື່ເສັ້ນທາງແຟ້ມ (ຕົວຢ່າງ/run/php-fpm/www. sock), ເຊິ່ງເບິ່ງເຫັນໄດ້ໃນລະບົບແຟ້ມເອກະສານ.

ເຕົ້າຮັບໂດເມນຂອງ UNIX ແມ່ນປະເພດພິເສດຂອງເອກະສານ - ການອະນຸຍາດເອກະສານແລະໄດເລກະທໍລີ ນຳ ໃຊ້ (ເຊັ່ນດຽວກັບເອກະສານ UNIX ປະເພດອື່ນ) ແລະສາມາດໃຊ້ເພື່ອ ຈຳ ກັດຂະບວນການໃດທີ່ເຈົ້າພາບສາມາດອ່ານແລະຂຽນໃສ່ເອກະສານ, (ແລະດັ່ງນັ້ນຈຶ່ງຕິດຕໍ່ກັບ server backend).

ວິທີນີ້, ເຕົ້າຮັບໂດເມນຂອງ UNIX ແມ່ນປອດໄພເພາະວ່າມີພຽງແຕ່ຂັ້ນຕອນທີ່ເຮັດວຽກຢູ່ໃນໂຮດໃນທ້ອງຖິ່ນເທົ່ານັ້ນທີ່ສາມາດໃຊ້ມັນໄດ້. ເຕົ້າຮັບ TCP/IP ອາດຈະຖືກເປີດເຜີຍຕໍ່ອິນເຕີເນັດເຊິ່ງກໍ່ໃຫ້ເກີດຄວາມສ່ຽງດ້ານຄວາມປອດໄພເວັ້ນເສຍແຕ່ວ່າມາດຕະການຄວາມປອດໄພພິເສດເຊັ່ນ Firewall ຖືກປະຕິບັດ.

ສິ່ງ ສຳ ຄັນ, ການໃຊ້ເຕົ້າຮັບໂດເມນ UNIX ບໍ່ຄືກັນກັບການໃຊ້ເຕົ້າຮັບ TCP/IP ກ່ຽວກັບການປະຕິບັດ, ການທົດສອບແລະເກນມາດຕະຖານຫຼາຍຢ່າງໄດ້ພິສູດໃຫ້ເຫັນວ່າໂດເມນຂອງ UNIX ມີຄວາມໄວໄວ. ຂໍ້ບົກຜ່ອງຕົ້ນຕໍຂອງເຕົ້າຮັບໂດເມນຂອງ UNIX ແມ່ນວ່າພວກເຂົາສາມາດປັບຂະ ໜາດ ໄດ້ ໜ້ອຍ, ພວກເຂົາສະ ໜັບ ສະ ໜູນ ການສື່ສານລະຫວ່າງຂະບວນການພາຍໃນລະບົບປະຕິບັດການດຽວກັນ (OS).

ທ່ານສາມາດ ກຳ ຫນົດຄ່າທີ່ຢູ່ PHP-FPM ຟັງໃນເອກະສານການຕັ້ງຄ່າສະລອຍນ້ ຳ. ໃຫ້ສັງເກດວ່າດ້ວຍ PHP-FPM, ທ່ານສາມາດເອີ້ນໃຊ້ຫຼາຍຂະບວນການທີ່ມີການຕັ້ງຄ່າທີ່ແຕກຕ່າງກັນ. ສະລອຍນ້ ຳ ໃນຕອນຕົ້ນເອີ້ນວ່າ www .

ສະຖານທີ່ຂອງເອກະສານການຕັ້ງຄ່າສະລອຍນ້ ຳ ຂອງຊັບພະຍາກອນແມ່ນຂື້ນກັບວິທີທີ່ PHP ແລະ PHP-FPM ຖືກຕິດຕັ້ງໃນລະບົບ Linux (ບໍ່ວ່າມັນຈະເປັນແບບເດີມ/ແບບດຽວຫຼືຫລາຍລຸ້ນພ້ອມກັນ).

ຕົວຢ່າງເຊັ່ນໃນ CentOS 8, ໂດຍມີແບບດຽວ, ໄຟລ໌ການຕັ້ງຄ່າ PHP ທັງ ໝົດ ແມ່ນຕັ້ງຢູ່ໃນໄດເລກະທໍລີ /etc ແລະຄ່າຕັ້ງຄ່າ PHP-FPM ໃນຕອນຕົ້ນ (www) ເອກະສານການຕັ້ງຄ່າແມ່ນ /etc/php-fpm.d/www.conf:

ເພື່ອລາຍຊື່ໄຟລ໌ການຕັ້ງຄ່າ PHP ທັງ ໝົດ, ໃຊ້ ຄຳ ສັ່ງ ls ຕໍ່ໄປນີ້.

# ls /etc/php*

ໃນ Ubuntu 20.04, ໄຟລ໌ການຕັ້ງຄ່າຂອງ PHP ແມ່ນຕັ້ງຢູ່ໃນລະບົບການຕັ້ງຄ່າ /etc/php// ແລະຄ່າເລີ່ມຕົ້ນຂອງ PHP-FPM (www) ແມ່ນ /etc/php/ /fpm/pool.d/www.conf :

$ ls /etc/php/7.4/

ການຕັ້ງຄ່າ PHP-FPM ເພື່ອຟັງໃນ Socket Domain Socket

ເພື່ອ ກຳ ຫນົດຄ່າ PHP-FPM ໃຫ້ຟັງໃນເຕົ້າຮັບໂດເມນຂອງ UNIX, ໃຫ້ເປີດແຟ້ມການຕັ້ງຄ່າ PHP-FPM ໃນເບື້ອງຕົ້ນ, ໂດຍໃຊ້ຕົວແກ້ຂໍ້ຄວາມທີ່ທ່ານມັກ.

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

ຫຼັງຈາກນັ້ນຊອກຫາ ຄຳ ສັ່ງຂອງການຟັງແລະ ກຳ ນົດມັນໃສ່ຊື່ແຟ້ມເອກະສານຂອງປ່ອງໂດເມນ UNIX ດັ່ງຕໍ່ໄປນີ້ ໃຫ້ສັງເກດວ່າການຕິດຕັ້ງສ່ວນໃຫຍ່ແມ່ນໃຊ້ເຕົ້າຮັບໂດເມນ UNIX ໂດຍຄ່າເລີ່ມຕົ້ນ.

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

ຖ້າທ່ານໃຊ້ເຕົ້າຮັບໂດເມນຂອງ UNIX, ທ່ານກໍ່ ຈຳ ເປັນຕ້ອງ ກຳ ນົດສິດໃນການອ່ານ/ຂຽນທີ່ ເໝາະ ສົມ ສຳ ລັບເອກະສານ, ເພື່ອອະນຸຍາດການເຊື່ອມຕໍ່ຈາກເຊີຟເວີເວັບ NGINX. ໂດຍຄ່າເລີ່ມຕົ້ນ, NGINX ເຮັດວຽກເປັນຜູ້ໃຊ້ແລະ nginx ກຸ່ມໃນ CentOS/RHEL/Fedora ແລະ www-data ໃນ Ubuntu ແລະ Debian.

ສະນັ້ນ, ຊອກຫາຕົວ ກຳ ນົດການຟັງແລະລະຫັດຟັງແລະ ກຳ ນົດໃຫ້ ເໝາະ ສົມ. ພ້ອມກັນນັ້ນ, ໃຫ້ ກຳ ນົດ ໂໝດ ເຖິງ 0660 ໂດຍໃຊ້ພາລາມິເຕີ 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

ໃຫ້ສັງເກດວ່າຖ້າການອະນຸຍາດໃນເອກະສານຊັອກໂດເມນຂອງ UNIX ບໍ່ຖືກຕັ້ງຄ່າຢ່າງຖືກຕ້ອງ, NGINX ອາດຈະສົ່ງຄືນຂໍ້ຜິດພາດຂອງປະຕູທີ່ບໍ່ດີ.

ການຕັ້ງຄ່າ PHP-FPM ເພື່ອຟັງໃນຊ່ອງ TCP/IP

ເຖິງແມ່ນວ່າເຕົ້າຮັບໂດເມນຂອງ UNIX ແມ່ນໄວກ່ວາເຕົ້າຮັບ TCP/IP, ແຕ່ອະດີດຍັງບໍ່ສາມາດຂະຫຍາຍໄດ້, ເພາະວ່າມັນສາມາດສະ ໜັບ ສະ ໜູນ ການສື່ສານລະຫວ່າງຂະບວນການໃນ OS ດຽວກັນ. ຖ້າ NGINX ແລະ server backend application (PHP-FPM) ກຳ ລັງໃຊ້ງານຢູ່ໃນລະບົບຕ່າງໆ, ທ່ານຈະຕ້ອງຕັ້ງຄ່າ PHP-FPM ເພື່ອຟັງໃນເຕົ້າຮັບ TCP/IP ສຳ ລັບເຊື່ອມຕໍ່.

ໃນເອກະສານການຕັ້ງຄ່າສະລອຍນ້ ຳ ຂອງ PHP-FPM, ກຳ ນົດທີ່ຢູ່ <ຟັງ> ຟັງ ດັ່ງຕໍ່ໄປນີ້. ໃຫ້ແນ່ໃຈວ່າທ່າເຮືອທີ່ທ່ານເລືອກບໍ່ໄດ້ຖືກໃຊ້ໂດຍຂັ້ນຕອນອື່ນຫຼືການບໍລິການອື່ນໃນລະບົບດຽວກັນ.

listen = 127.0.0.1:3000

ການຕັ້ງຄ່າ NGINX ເພື່ອເຮັດວຽກກັບ PHP-FPM Application Server

ເມື່ອທ່ານໄດ້ຕັ້ງຄ່າທີ່ຢູ່ PHP-FPM ຟັງແລ້ວ, ທ່ານ ຈຳ ເປັນຕ້ອງຕັ້ງຄ່າ NGINX ຕໍ່ການຮ້ອງຂໍຕົວແທນໃຫ້ມັນຜ່ານທີ່ຢູ່ນັ້ນ, ໂດຍໃຊ້ພາລາມິເຕີການຕັ້ງຄ່າ fastcgi_pass , ໃນເອກະສານການຕັ້ງຄ່າບລັອກເຊີຟເວີ.

ຕົວຢ່າງເຊັ່ນຖ້າເອກະສານການຕັ້ງຄ່າ ສຳ ລັບເວັບໄຊທ໌ຂອງທ່ານແມ່ນ /etc/nginx/conf.d/example.com.conf, ເປີດມັນເພື່ອດັດແກ້.

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

ຊອກຫາທ່ອນ ສະຖານທີ່ ສຳ ລັບການປະມວນຜົນເອກະສານ .php ແລະ ກຳ ນົດພາລາມິເຕີ fastcgi_pass ດັ່ງຕໍ່ໄປນີ້, ຖ້າທ່ານຕັ້ງຄ່າ PHP-FPM ເພື່ອຟັງ UNIX ໂດເມນໂດເມນ.

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

ຫຼືໃຊ້ທີ່ຢູ່ TCP/IP ຖ້າທ່ານໄດ້ຕັ້ງຄ່າ PHP-FPM ເພື່ອຟັງໃນເຕົ້າຮັບ TCP/IP. ຖ້າເຄື່ອງແມ່ຂ່າຍຂອງໂປແກຼມ backend (PHP-FPM) ກຳ ລັງໃຊ້ງານຢູ່ເຊີຟເວີແຍກຕ່າງຫາກ (ທົດແທນ 10.42.0.10 ກັບທີ່ຢູ່ IP ຂອງເຄື່ອງທີ່ເຄື່ອງແມ່ຂ່າຍຂອງ PHP-FPM FastCGI ກຳ ລັງໃຊ້ຢູ່).

fastcgi_pass  10.42.0.10:3000;

ສິ່ງ ສຳ ຄັນ: ໃນ CentOS 8, PHP-FPM ແມ່ນຖືກ ກຳ ນົດເປັນ server ທີ່ຢູ່ເບື້ອງເທິງໃນເອກະສານ /etc/nginx/conf.d/php-fpm.conf, ພາຍໃນ block upstream, ມີຊື່ php-fpm.

ທ່ານສາມາດເຮັດການປ່ຽນແປງຢູ່ບ່ອນນີ້ໄດ້ອີງຕາມທີ່ຢູ່ PHP-FPM ຖືກຕັ້ງຄ່າໃຫ້ຟັງ, ໃນເອກະສານການຕັ້ງຄ່າສະລອຍນ້ ຳ. ການຕັ້ງຄ່າເລີ່ມຕົ້ນຊີ້ໃຫ້ເຫັນຊັອກໂດເມນ UNIX.

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

ແລະໃນເອກະສານບລັອກເຊີເວີ້ຂອງເວບໄຊທ໌ຂອງທ່ານ, ໃຫ້ຕັ້ງຄ່າຕົວ ກຳ ນົດຕົວຢ່າງ fastcgi_pass ດັ່ງທີ່ສະແດງໄວ້.

fastcgi_pass php-fpm;

ຫຼັງຈາກການປ່ຽນແປງການຕັ້ງຄ່າຂອງ PHP-FPM ແລະ NGINX, ກວດສອບ syntax ການຕັ້ງຄ່າຂອງພວກມັນເພື່ອຄວາມຖືກຕ້ອງດັ່ງຕໍ່ໄປນີ້.

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

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

ໃນຂະນະທີ່ຜົນຜະລິດ ຄຳ ສັ່ງສະແດງເອກະສານການຕັ້ງຄ່າຕົ້ນຕໍເທົ່ານັ້ນ, ທຸກເອກະສານການຕັ້ງຄ່າອື່ນໆກໍ່ຖືກລວມເຂົ້າແລະກວດສອບເຊັ່ນກັນ.

ຕໍ່ໄປ, ທ່ານຕ້ອງການເລີ່ມຕົ້ນສອງບໍລິການເພື່ອ ນຳ ໃຊ້ການປ່ຽນແປງ, ໂດຍໃຊ້ ຄຳ ສັ່ງ systemctl.

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

ຖ້າທ່ານມີຂໍ້ຜິດພາດ, ທ່ານສາມາດກວດເບິ່ງເອກະສານບັນທຶກ NGINX ແລະ PHP-FPM ໂດຍໃຊ້ ຄຳ ສັ່ງຂອງແມວ.

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

ນັ້ນແມ່ນສິ່ງທີ່ພວກເຮົາມີ ສຳ ລັບທ່ານ. ສ່ວນ ຄຳ ເຫັນຂ້າງລຸ່ມນີ້ສາມາດໃຊ້ເພື່ອຖາມ ຄຳ ຖາມໄດ້. ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງເອກະສານ NGINX ແລະເອກະສານ PHP-FPM.