PHP-FPM چیست؟ آموزش بهینه سازی تنظیمات PHP-FPM

PHP-FPM چیست؟ آموزش بهینه سازی تنظیمات PHP-FPM

PHP-FPM (FastCGI Process Manager) یک روش سریع مدیریت فرآیند CGI است که بیشتر برای وب سایت های پر بازدید استفاده می شود. در این روش، صفحات PHP با وب سرورهای مختلف مانند Apache و Nginx اجرا می شوند که باعث می شود اسکریپت های PHP سریعتر از روش های سنتی مبتنی بر CGI مانند SUPHP یا mod_php اجرا شوند.

مزیت اصلی روش PHP-FPM استفاده از منابع کمتری مانند RAM و CPU است. با توجه به اهمیت این موضوع، در این مقاله وبلاگ پارس پک قصد داریم در مورد بهینه سازی تنظیمات PHP-FPM با شما صحبت کنیم و علاوه بر توضیح نکات لازم در این زمینه، نحوه انجام آن را به شما آموزش دهیم؛ پس تا انتها همراه ما باشید.

FastCGI چیست و چرا باید از آن استفاده کرد؟

سرورهای وب در ابتدا از CGI (رابط دروازه مشترک) به عنوان راهی برای اجرای برنامه ها برای ایجاد محتوای وب پویا استفاده می کردند. با این حال، مشکل این بود که هر درخواست CGI به نوعی باعث می‌شود وب سرور فرآیند جدیدی را آغاز کند که در طی آن زمان اجرا را مقداردهی اولیه می‌کند، اسکریپت را بارگذاری می‌کند و در نهایت تولیدکننده محتوا را اجرا می‌کند. این فرآیند برای اسکریپت های ساده عالی بود. اما وقتی صحبت از برنامه های پیچیده می شود، بار زیادی بر وب سرور تحمیل می کند یا منابع زیادی را در بر می گیرد.

برای حل این مشکل، وب سرور آپاچی ماژول mod-php را معرفی کرد که برای اجرای PHP در داخل خود آپاچی استفاده می شد. اگرچه این راه حل مشکل سربار پرس و جوی هر فرآیند را حل کرد، اما مشکل عمده دیگری همچنان باقی بود: این روش فقط می تواند به صورت عمودی مقیاس شود، و این مشکل آن را تنها در سرورهای بزرگتر قابل اجرا کرد. همچنین، مسائل امنیتی و زمان اجرا احتمالاً به مشکلات اضافه می کند.

از طرف دیگر، FastCGI برنامه را به یک فرآیند جداگانه در خارج از وب سرور و حتی به یک یا چند سرور اشاره می کند و به برنامه اجازه می دهد تا مقیاس افقی را انجام دهد. بنابراین، مشکلات موجود در بالا با استفاده از FastCGI حل شد.

PHP-FPM چیست؟

هنگامی که کاربر اینترنت درخواست خود را از طریق مرورگر یا اپلیکیشن دیگر به سرور ارسال می کند، پی اچ پی مسئولیتی در قبال ایجاد اولین نقطه تماس ندارد. در واقع این وظیفه را سرورهای HTTP بر عهده می گیرند که از مهمترین آنها می توان به وب سرورهای Apache و Nginx اشاره کرد. در مرحله بعد، این وب سرورها باید تصمیم بگیرند که چگونه با PHP تماس بگیرند و نوع درخواست و داده ها و هدرها را به آن منتقل کنند. تصویر زیر ممکن است به شما در درک عمیق‌تر این مفهوم کمک کند:

PHP-FPM چیست؟

در برنامه های مدرن PHP، قسمت فایل یاب که در تصویر بالا به وضوح نشان داده شده است، در فایل index.php قرار می گیرد و سرور به گونه ای پیکربندی می شود که تمام درخواست ها را به آن فوروارد کند. به طور خلاصه، زمانی که آپاچی به عنوان وب سرور غالب در پروژه ها استفاده می شد، PHP ماژولی بود که در سرور گنجانده شده بود.

همانطور که گفتیم این مشکل باعث می شد که سرور پس از دریافت هر درخواست فرآیند جدیدی را شروع کند که به طور خودکار اجرای PHP را روشن می کرد. این روش mod_php است که در مورد محدودیت های آن توضیح دادیم و Nginx توانست این مشکل را با PHP-FPM حل کند. اگرچه لازم به ذکر است که PHP-FPM با هر دو وب سرور Apache و Nginx کار می کند.

در PHP-FPM، فرآیندهای مربوط به برنامه PHP در داخل سرور قرار دارند که مدیریت PHP را بر عهده دارد. در واقع، وب سرور اهمیتی نمی دهد که PHP شما در کجا قرار دارد. بلکه تنها سوال مهم این است که چگونه داده ها برای آن ارسال یا از آن دریافت می شود.

بیایید با وب سرور Nginx شروع کنیم و سپس به وب سرور محبوب آپاچی برویم. اگر Nginx را به درستی پیکربندی کرده اید، یا فقط به آن دسترسی دارید (یعنی قبل از شما به درستی پیکربندی شده بود)، باید کدهایی مانند زیر را مشاهده کنید:

location ~ .php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+.php)(/.+)$;
      fastcgi_pass unix:/run/php/php7.2-fpm.sock;
      fastcgi_index index.php;
      include fastcgi_params;
      fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

کدهای مشابه برای وب سرور آپاچی به شرح زیر است:

<VirtualHost *:80>

    ServerName example.com

    ServerAlias www.example.com

    DocumentRoot /var/www/html

    <Directory /var/www/html>

        Options -Indexes +FollowSymLinks +MultiViews

        AllowOverride All

        Require all granted

    </Directory>

    <FilesMatch .php$>

        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"

    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

به کد تعبیه شده برای وب سرور Nginx و کمی روی این خط کد تمرکز کنید:

astcgi_pass unix:/run/php/php7.2-fpm.sock;

این خطی است که تقریباً هر کاری را که ما نیاز داریم انجام می دهد. یعنی به Nginx می گوید که از طریق سوکتی به نام php7.2-fpm.sock با فرآیند PHP ارتباط برقرار کند. بنابراین Nginx برای هر درخواست دریافتی داده را از طریق این فایل می نویسد و با دریافت خروجی به مرورگر کاربر ارسال می کند.

در حالی که این روند می تواند در پشت صحنه واقعاً پیچیده باشد، به نظر می رسد در حال حاضر کافی باشد. برای دسته بندی صحیح این موضوعات در ذهن خود، بیایید آنچه را که در اینجا در مقاله آمده است، خلاصه کنیم:

  • PHP مستقیماً درخواست های ارسال شده توسط مرورگر کاربر را دریافت نمی کند. در عوض، وب سرورهایی مانند Nginx در ابتدا این درخواست ها را رهگیری می کنند.
  • وب سرورها می دانند که چگونه با فرآیند PHP تماس بگیرند و تمام درخواست های داده را به PHP ارسال می کنند.
  • هنگامی که PHP کار خود را به پایان می رساند، پاسخ مناسب را به وب سرور ارسال می کند و در نهایت آن پاسخ به مرورگر کاربر یا اساساً هر برنامه ای که از آن استفاده می کند بازگردانده می شود. تصویر زیر می تواند این مفهوم را به صورت گرافیکی توضیح دهد:

عملیات بهینه سازی PHP-FPM با وب سرور EngineX

آموزش بهینه سازی تنظیمات PHP-FPM

برای بهینه سازی تنظیمات PHP-FPM، مراحل زیر را به ترتیب دنبال کنید:

1. فایل php.ini مربوط به نسخه PHP نصب شده روی سرور را پیدا کنید.

2. پس از یافتن این فایل، مقادیر متغیرهای زیر را با توجه به نیاز خود افزایش دهید:

  • post_max_size
  • upload_max_filesize
  • Maximum_time_to_run
  • حداکثر_زمان_وارد شده
  • حافظه_محدود

3. وب سرور خود را مجددا راه اندازی کنید.

4. با چسباندن فایل phpinfo.php می توانید مقادیر تنظیم شده را مشاهده کنید.

اگر از کنترل پنل cPanel برای مدیریت سرور خود استفاده می کنید، این کار به راحتی با استفاده از گزینه MultiPHP INI Editor امکان پذیر است. این گزینه در زیربخش نرم افزار قرار دارد و نحوه دسترسی به آن در تصویر زیر نشان داده شده است:

اگر کنترل پنل برای مدیریت مستقیم روی سرور نصب شده است، باید این موارد را به صورت دستی و به ترتیبی که در ابتدای مقاله ذکر کردیم تغییر دهید.

وب سرور چیست و چگونه کار می کند؟ انواع مختلف وب سرورها از نظر کارایی چیست؟ در مقاله زیر بخوانید.

یک وب سرور چیست؟

نتیجه

FastCGI یک پروتکل باینری است که برای ارتباط برنامه های کاربردی پویا با سرورهای وب استفاده می شود. روش های مختلفی برای پیاده سازی این پروتکل وجود دارد که یکی از آنها روش به روز و موثر PHP-FPM است و به خصوص در وب سایت ها و اپلیکیشن های پربازدید مورد استفاده قرار می گیرد. برای استفاده بهتر و کارآمدتر از این روش، باید تنظیماتی را در فایل PHP خود انجام دهید. در این مقاله از وبلاگ پارس پک نحوه اعمال این تنظیمات را به طور کامل توضیح داده ایم.

سوالات متداول

1. FastCGI چیست؟

FastCGI پروتکلی است که بر اساس آن اپلیکیشن ها و وب سایت هایی با محتوای پویا با وب سرور ارتباط برقرار می کنند.

2. PHP-FPM چیست؟

PHP-FPM یکی از راه های پیاده سازی پروتکل FastCGI است. این روش به عنوان جایگزینی برای روش های سنتی قبلی مانند SUPHP یا php_mod شناخته می شود.

3. PHP-FPM به چه معناست؟

FPM مخفف FastCGI Process Manager است.

4. چگونه PHP-FPM را بهینه کنیم؟

برای این کار باید تغییراتی در برخی از متغیرهای فایل php.ini خود ایجاد کنید.