UNIX അല്ലെങ്കിൽ TCP/IP സോക്കറ്റ് ഉപയോഗിച്ച് NGINX-ലേക്ക് PHP-FPM-ലേക്ക് എങ്ങനെ ബന്ധിപ്പിക്കാം


NGINX വെബ് സെർവർ (റിവേഴ്സ് പ്രോക്സി ആയി) FastCGI പ്രോട്ടോക്കോൾ വഴി PHP ആപ്ലിക്കേഷനുകൾ നൽകുന്നു (ഒരു ബാക്കെൻഡ് ആപ്ലിക്കേഷൻ സെർവറായി). NGINX, PHP-FPM (FastCGI പ്രോസസ് മാനേജർ) ഉപയോഗിക്കുന്നു, ഇത് ഒരു ബദൽ PHP FastCGI നടപ്പിലാക്കൽ, അത് CGI അഭ്യർത്ഥനകൾ കേൾക്കുന്ന ഒരു ഡെമൺ ആയി പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുന്നു. ഹെവി-ലോഡഡ് വെബ്uസൈറ്റുകൾ അല്ലെങ്കിൽ വെബ് ആപ്ലിക്കേഷനുകൾ പവർ ചെയ്യുന്നതിനായി രൂപകൽപ്പന ചെയ്uതിരിക്കുന്ന അധിക ഫീച്ചറുകളുമായാണ് ഇത് വരുന്നത്, എന്നാൽ ഏത് വലുപ്പത്തിലുള്ള സൈറ്റുകൾക്കും ഇത് ഉപയോഗിക്കാം.

FastCGI റിസോഴ്സ് പൂളുകളുടെ കോൺഫിഗറേഷനെ PHP-FPM പിന്തുണയ്ക്കുക മാത്രമല്ല, FastCGI ഇന്റേണലുകളിൽ പലതും മെച്ചപ്പെടുത്തുകയും പിശക് റിപ്പോർട്ടിംഗ്, സ്ക്രിപ്റ്റ് അവസാനിപ്പിക്കൽ എന്നിവയും മറ്റും വർദ്ധിപ്പിക്കുകയും ചെയ്യുന്നു. പിuഎച്ച്uപി ഡെമോണൈസേഷൻ, പ്രോസസ്സ് മാനേജ്uമെന്റ്, അഭ്യർത്ഥനകൾ വരാൻ കഴിയുന്ന ചലനാത്മക എണ്ണം, പിശക് തലക്കെട്ട്, ത്വരിതപ്പെടുത്തിയ അപ്uലോഡ് പിന്തുണ എന്നിവയും അതിലേറെയും ഇതിൽ ഉൾപ്പെടുന്നു.

NGINX-ൽ നിന്നുള്ള FastCGI അഭ്യർത്ഥനകൾ സ്വീകരിക്കുന്നതിന്, PHP-FPM-ന് ഒന്നുകിൽ TCP/IP സോക്കറ്റിലോ UNIX ഡൊമെയ്ൻ സോക്കറ്റിലോ കേൾക്കാനാകും. fastcgi_pass നിർദ്ദേശം ഉപയോഗിച്ച് PHP-FPM-ലേക്ക് (പ്രോക്സി അഭ്യർത്ഥനകൾ) ബന്ധിപ്പിക്കുന്നതിന് NGINX ഉപയോഗിക്കുന്നത് ഏത് വിലാസമാണ് ഉപയോഗിക്കാൻ നിങ്ങൾ തിരഞ്ഞെടുക്കുന്നത്.

PHP-FPM ഉപയോഗിച്ച് സെർവർ PHP ആപ്ലിക്കേഷനുകളിലേക്ക് NGINX എങ്ങനെ കോൺഫിഗർ ചെയ്യാമെന്ന് ഈ ഗൈഡ് വിശദീകരിക്കുന്നു. NGINX-നെ PHP-FPM-ലേക്ക് ബന്ധിപ്പിക്കുന്നതിന് TCP/IP സോക്കറ്റ് അല്ലെങ്കിൽ UNIX ഡൊമെയ്ൻ സോക്കറ്റ് എപ്പോൾ ഉപയോഗിക്കണമെന്നും എന്തുകൊണ്ടാണെന്നും ഇത് വിവരിക്കുന്നു.

നിങ്ങളുടെ Linux സിസ്റ്റത്തിൽ NGINX, PHP-FPM എന്നിവ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഈ ഗൈഡ് അനുമാനിക്കുന്നു, അല്ലെങ്കിൽ, കാണുക:

  • CentOS 8-ൽ LEMP സെർവർ എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം
  • ഉബുണ്ടു 20.04 സെർവറിൽ LEMP സ്റ്റാക്ക് PhpMyAdmin എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം
  • RHEL 8-ൽ NGINX, MySQL/MariaDB, PHP എന്നിവ എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം
  • ഡെബിയൻ 10 സെർവറിൽ LEMP എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാം

UNIX ഡൊമെയ്uൻ (അല്ലെങ്കിൽ IPC) സോക്കറ്റുകൾ ഇന്റർ-പ്രോസസ് കമ്മ്യൂണിക്കേഷന്റെ (IPC) ഒരു ഉപാധിയാണ്, അത് ഒരേ ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിൽ പ്രവർത്തിക്കുന്ന പ്രോസസ്സുകൾക്കിടയിൽ കാര്യക്ഷമമായ ഡാറ്റ കൈമാറ്റം അനുവദിക്കുന്നു, അതേസമയം TCP/IP (അല്ലെങ്കിൽ ഇന്റർനെറ്റ് ഡൊമെയ്ൻ) സോക്കറ്റുകൾ ഒരു നെറ്റ്uവർക്കിലൂടെ ആശയവിനിമയം നടത്താൻ പ്രക്രിയകളെ അനുവദിക്കുന്നു.

ഒരു IP വിലാസവും പോർട്ടും (ഉദാ: 127.0.0.1:9000) ഉപയോഗിച്ച് ഒരു സെർവറിനെ തിരിച്ചറിയുന്ന TCP/IP സോക്കറ്റിൽ നിന്ന് വ്യത്യസ്തമായി, നിങ്ങൾക്ക് ഒരു ഫയൽ പാത്ത് നെയിം (ഉദാ. /run/php-fpm/www) ഉപയോഗിച്ച് ഒരു സെർവറിനെ UNIX ഡൊമെയ്uൻ സോക്കറ്റിലേക്ക് ബന്ധിപ്പിക്കാൻ കഴിയും. സോക്ക്), ഇത് ഫയൽസിസ്റ്റത്തിൽ ദൃശ്യമാണ്.

UNIX ഡൊമെയ്ൻ സോക്കറ്റ് എന്നത് ഒരു പ്രത്യേക തരം ഫയലാണ് - ഫയലിനും ഡയറക്uടറി അനുമതികൾക്കും ബാധകമാണ് (മറ്റേത് തരത്തിലുള്ള UNIX ഫയലിന്റെ കാര്യത്തിലെന്നപോലെ) കൂടാതെ ഹോസ്റ്റിലെ ഏത് പ്രോസസ്സുകൾക്കാണ് ഫയൽ വായിക്കാനും എഴുതാനും കഴിയുക എന്നത് നിയന്ത്രിക്കാൻ ഇത് ഉപയോഗിക്കാം. (അങ്ങനെ ബാക്കെൻഡ് സെർവറുമായി ആശയവിനിമയം നടത്തുക).

ഈ രീതിയിൽ, ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റ് സുരക്ഷിതമാണ്, കാരണം ലോക്കൽ ഹോസ്റ്റിലെ പ്രോസസ്സുകൾക്ക് മാത്രമേ അത് ഉപയോഗിക്കാൻ കഴിയൂ. ഫയർവാൾ പോലുള്ള അധിക സുരക്ഷാ നടപടികൾ നടപ്പിലാക്കിയില്ലെങ്കിൽ ഒരു ടിസിപി/ഐപി സോക്കറ്റ് ഇൻറർനെറ്റിലേക്ക് തുറന്നുകാട്ടപ്പെട്ടേക്കാം.

പ്രധാനമായി, ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റ് ഉപയോഗിക്കുന്നത് പ്രകടനവുമായി ബന്ധപ്പെട്ട് TCP/IP സോക്കറ്റ് ഉപയോഗിക്കുന്നതിന് തുല്യമല്ല, നിരവധി ടെസ്റ്റുകളും ബെഞ്ച്മാർക്കുകളും UNIX ഡൊമെയ്ൻ സോക്കറ്റുകൾ വേഗമേറിയതാണെന്ന് തെളിയിച്ചിട്ടുണ്ട്. UNIX ഡൊമെയ്uൻ സോക്കറ്റുകളുടെ പ്രധാന പോരായ്മ, അവ സ്കെയിലബിൾ കുറവാണ് എന്നതാണ്, അവ ഒരേ ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനുള്ളിൽ (OS) ഇന്റർ-പ്രോസസ് കമ്മ്യൂണിക്കേഷനെ മാത്രമേ പിന്തുണയ്ക്കൂ.

ഒരു റിസോഴ്സ് പൂൾ കോൺഫിഗറേഷൻ ഫയലിൽ PHP-FPM ശ്രദ്ധിക്കുന്ന വിലാസം നിങ്ങൾക്ക് കോൺഫിഗർ ചെയ്യാം. PHP-FPM ഉപയോഗിച്ച്, നിങ്ങൾക്ക് വ്യത്യസ്ത ക്രമീകരണങ്ങളുള്ള നിരവധി പ്രോസസുകൾ പ്രവർത്തിപ്പിക്കാൻ കഴിയുമെന്നത് ശ്രദ്ധിക്കുക. സ്ഥിരസ്ഥിതി പൂളിനെ www എന്ന് വിളിക്കുന്നു.

റിസോഴ്സ് പൂൾ കോൺഫിഗറേഷൻ ഫയലിന്റെ സ്ഥാനം ലിനക്സ് സിസ്റ്റത്തിൽ PHP, PHP-FPM എന്നിവ ഇൻസ്റ്റാൾ ചെയ്യുന്ന രീതിയെ ആശ്രയിച്ചിരിക്കുന്നു (അത് ഒരു ഡിഫോൾട്ട്/സിംഗിൾ പതിപ്പ് അല്ലെങ്കിൽ ഒന്നിലധികം പതിപ്പുകൾ ഒരേസമയം).

ഉദാഹരണത്തിന്, CentOS 8-ൽ, ഒരൊറ്റ പതിപ്പിൽ, എല്ലാ PHP കോൺഫിഗറേഷൻ ഫയലുകളും /etc ഡയറക്uടറിയിലും സ്ഥിരസ്ഥിതി PHP-FPM പൂൾ (www) കോൺഫിഗറേഷൻ ഫയൽ ആണ്. /etc/php-fpm.d/www.conf:

എല്ലാ PHP കോൺഫിഗറേഷൻ ഫയലുകളും ലിസ്റ്റുചെയ്യുന്നതിന്, ഇനിപ്പറയുന്ന ls കമാൻഡ് ഉപയോഗിക്കുക.

# ls /etc/php*

ഉബുണ്ടു 20.04-ൽ, PHP കോൺഫിഗറേഷൻ ഫയലുകൾ /etc/php// ഡയറക്uടറിയിലും സ്ഥിരസ്ഥിതി PHP-FPM പൂൾ (www) കോൺഫിഗറേഷൻ ഫയലിലുമാണ് സ്ഥിതി ചെയ്യുന്നത്. ഇതാണ് /etc/php//fpm/pool.d/www.conf:

$ ls /etc/php/7.4/

UNIX ഡൊമെയ്ൻ സോക്കറ്റിൽ ശ്രവിക്കാൻ PHP-FPM കോൺഫിഗർ ചെയ്യുന്നു

ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റിൽ കേൾക്കാൻ PHP-FPM കോൺഫിഗർ ചെയ്യുന്നതിന്, നിങ്ങളുടെ പ്രിയപ്പെട്ട ടെക്സ്റ്റ് എഡിറ്റർ ഉപയോഗിച്ച് നിങ്ങളുടെ ഡിഫോൾട്ട് PHP-FPM പൂൾ കോൺഫിഗറേഷൻ ഫയൽ തുറക്കുക.

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

തുടർന്ന് ലിസൻ ഡയറക്uടീവിനായി തിരയുക, അത് യുണിക്സ് ഡൊമെയ്ൻ സോക്കറ്റിന്റെ ഫയൽ പാത്ത് നെയിമിലേക്ക് ഇനിപ്പറയുന്ന രീതിയിൽ സജ്ജമാക്കുക. മിക്ക ഇൻസ്റ്റാളേഷനുകളും സ്ഥിരസ്ഥിതിയായി ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റ് ഉപയോഗിക്കുന്നു എന്നത് ശ്രദ്ധിക്കുക.

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

നിങ്ങൾ ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റ് ഉപയോഗിക്കുകയാണെങ്കിൽ, NGINX വെബ് സെർവറിൽ നിന്നുള്ള കണക്ഷനുകൾ അനുവദിക്കുന്നതിന്, ഫയലിനായി ഉചിതമായ വായന/എഴുത്ത് അനുമതികളും നിങ്ങൾ സജ്ജീകരിക്കേണ്ടതുണ്ട്. സ്ഥിരസ്ഥിതിയായി, NGINX CentOS/RHEL/Fedora-ലും Ubuntu, Debian എന്നിവയിലും www-data-ലും ഉപയോക്താവായും ഗ്രൂപ്പ് nginx ആയും പ്രവർത്തിക്കുന്നു.

അതിനാൽ, listen.owner, listen.group എന്നീ പാരാമീറ്ററുകൾ കണ്ടെത്തി അതിനനുസരിച്ച് സജ്ജീകരിക്കുക. കൂടാതെ, listen.mode പാരാമീറ്റർ ഉപയോഗിച്ച് മോഡ് 0660 ആയി സജ്ജമാക്കുക.

------------- 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 ഒരു മോശം ഗേറ്റ്uവേ പിശക് നൽകിയേക്കാം.

ഒരു TCP/IP സോക്കറ്റിൽ കേൾക്കാൻ PHP-FPM കോൺഫിഗർ ചെയ്യുന്നു

ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റിന് TCP/IP സോക്കറ്റിനേക്കാൾ വേഗതയുണ്ടെങ്കിലും, ആദ്യത്തേത് കുറച്ച് സ്കെയിലബിൾ ആണ്, കാരണം ഇതിന് ഒരേ OS-ലെ ഇന്റർ-പ്രോസസ് കമ്മ്യൂണിക്കേഷനെ മാത്രമേ പിന്തുണയ്ക്കാൻ കഴിയൂ. NGINX ഉം ബാക്കെൻഡ് ആപ്ലിക്കേഷൻ സെർവറും (PHP-FPM) വ്യത്യസ്ത സിസ്റ്റങ്ങളിൽ പ്രവർത്തിക്കുന്നുണ്ടെങ്കിൽ, കണക്ഷനുകൾക്കായി ഒരു TCP/IP സോക്കറ്റിൽ കേൾക്കാൻ നിങ്ങൾ PHP-FPM കോൺഫിഗർ ചെയ്യേണ്ടതുണ്ട്.

PHP-FPM പൂൾ കോൺഫിഗറേഷൻ ഫയലിൽ, listen വിലാസം ഇനിപ്പറയുന്ന രീതിയിൽ സജ്ജമാക്കുക. നിങ്ങൾ തിരഞ്ഞെടുത്ത പോർട്ട് അതേ സിസ്റ്റത്തിലെ മറ്റൊരു പ്രോസസ്സോ സേവനമോ ഉപയോഗിക്കുന്നില്ലെന്ന് ഉറപ്പാക്കുക.

listen = 127.0.0.1:3000

PHP-FPM ആപ്ലിക്കേഷൻ സെർവറുമായി പ്രവർത്തിക്കാൻ NGINX കോൺഫിഗർ ചെയ്യുന്നു

PHP-FPM ശ്രവിക്കുന്ന വിലാസം നിങ്ങൾ ക്രമീകരിച്ചുകഴിഞ്ഞാൽ, ഒരു വെർച്വൽ സെർവർ ബ്ലോക്ക് കോൺഫിഗറേഷൻ ഫയലിൽ fastcgi_pass കോൺഫിഗറേഷൻ പാരാമീറ്റർ ഉപയോഗിച്ച്, ആ വിലാസം വഴി പ്രോക്സി അഭ്യർത്ഥനയിലേക്ക് NGINX കോൺഫിഗർ ചെയ്യേണ്ടതുണ്ട്.

ഉദാഹരണത്തിന്, നിങ്ങളുടെ വെബ്uസൈറ്റിനായുള്ള കോൺഫിഗറേഷൻ ഫയൽ /etc/nginx/conf.d/example.com.conf ആണെങ്കിൽ, എഡിറ്റുചെയ്യുന്നതിനായി അത് തുറക്കുക.

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

.php ഫയലുകൾ പ്രോസസ്സ് ചെയ്യുന്നതിനായി ലൊക്കേഷൻ ബ്ലോക്കിനായി നോക്കുക, ഒരു UNIX-ൽ കേൾക്കാൻ നിങ്ങൾ PHP-FPM ക്രമീകരിച്ചിട്ടുണ്ടെങ്കിൽ, fastcgi_pass പാരാമീറ്റർ ഇനിപ്പറയുന്ന രീതിയിൽ സജ്ജമാക്കുക. ഡൊമെയ്ൻ സോക്കറ്റ്.

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 വിലാസം ഉപയോഗിക്കുക. ബാക്കെൻഡ് ആപ്ലിക്കേഷൻ സെർവർ (PHP-FPM) ഒരു പ്രത്യേക സെർവറിൽ പ്രവർത്തിക്കുന്നുണ്ടെങ്കിൽ (PHP-FPM FastCGI സെർവർ പ്രവർത്തിക്കുന്ന മെഷീന്റെ IP വിലാസം ഉപയോഗിച്ച് 10.42.0.10 മാറ്റിസ്ഥാപിക്കുക).

fastcgi_pass  10.42.0.10:3000;

പ്രധാനപ്പെട്ടത്: CentOS 8-ൽ, PHP-FPM എന്നത് /etc/nginx/conf.d/php-fpm.conf ഫയലിൽ, ഒരു അപ്uസ്ട്രീം ബ്ലോക്കിനുള്ളിൽ, php-fpm എന്ന പേരിൽ ഒരു അപ്uസ്ട്രീം സെർവറായി നിർവചിച്ചിരിക്കുന്നു.

പൂൾ കോൺഫിഗറേഷൻ ഫയലിൽ കേൾക്കാൻ ക്രമീകരിച്ചിരിക്കുന്ന PHP-FPM വിലാസം അനുസരിച്ച് നിങ്ങൾക്ക് ഇവിടെ മാറ്റങ്ങൾ വരുത്താം. സ്ഥിരസ്ഥിതി കോൺഫിഗറേഷൻ ഒരു UNIX ഡൊമെയ്ൻ സോക്കറ്റിലേക്ക് പോയിന്റ് ചെയ്യുന്നു.

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

നിങ്ങളുടെ സൈറ്റിന്റെ സെർവർ ബ്ലോക്ക് ഫയലിൽ, കാണിച്ചിരിക്കുന്നതുപോലെ fastcgi_pass പാരാമീറ്റർ സജ്ജമാക്കുക.

fastcgi_pass php-fpm;

PHP-FPM, NGINX കോൺഫിഗറേഷനുകളിൽ മാറ്റങ്ങൾ വരുത്തിയ ശേഷം, അവയുടെ കോൺഫിഗറേഷൻ വാക്യഘടന ശരിയാണോ എന്ന് പരിശോധിക്കുക.

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

നിങ്ങൾക്ക് എന്തെങ്കിലും പിശകുകൾ ലഭിക്കുകയാണെങ്കിൽ, cat കമാൻഡ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് 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

ഞങ്ങൾക്ക് നിങ്ങൾക്കായി ഉണ്ടായിരുന്നത് അത്രമാത്രം. ചോദ്യങ്ങൾ ചോദിക്കാൻ താഴെയുള്ള കമന്റ് സെക്ഷൻ ഉപയോഗിക്കാം. കൂടുതൽ വിവരങ്ങൾക്ക്, PHP-FPM ഡോക്യുമെന്റേഷൻ കാണുക.