Avatar
نویسنده: علیرضا برزودی
دوشنبه 1 خرداد 1402
مطالعه: ۷ دقیقه ۰ نظر ۶۵ بازدید
آموزش بهینه سازی php fpm

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

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

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

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

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

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

درمقابل، FastCGI اپلیکیشن را به فرایندی جداگانه در خارج از وب سرور و حتی به یک یا چند سرور هدایت می‌کند و به اپلیکیشن اجازه می‌دهد تا به‌صورت افقی (Horizontal) نیز مقیاس‌ شود. بدین‌ترتیب، مشکلاتی که از قبل وجود داشت و در بالا به آن‌ها اشاره کردیم، با استفاده از FastCGI حل شد.

PHP-FPM چیست؟

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

روش بهینه سازی php fpm

PHP-FPM چیست؟

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

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

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

اجازه دهید تا موضوع را با وب سرور Nginx شروع کنیم و سپس به‌سراغ وب سرور محبوب Apache برویم. اگر تنظیمات 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 برای هریک از Requestهای دریافت‌شده، داده‌ها را ازطریق همین فایل می‌نویسد و با دریافت خروجی، آن را به مرورگر کاربر ارسال می‌کند.

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

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

بررسی عملکرد PHP-FPM

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

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

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

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

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

  • post_max_size
  • upload_max_filesize
  • max_execution_time
  • max_input_time 
  • memory_limit

۳. وب سرور خود را Restart کنید.

۴. با قراردادن فایل phpinfo.php، می‌توانید مقادیر تنظیم‌شده را مشاهده کنید.

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

Php fpm چیست؟

انتخاب گزینه MultiPHP INI Editor برای بهینه‌سازی تنظیمات PHP-FPM

اگر کنترل پنل نصب‌شده روی سرور دایرکت ادمین باشد، این موارد را باید به‌صورت دستی و به‌ترتیبی که در ابتدای مطلب گفتیم، اصلاح کنید.

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

وب سرور چیست؟

جمع‌بندی

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

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

۱. FastCGI چیست؟

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

۲. PHP-FPM چیست؟

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

۳. PHP-FPM مخفف چیست؟

FPM مخفف عبارت FastCGI Process Manager است.

۴. چطور می‌توان PHP-FPM را بهینه‌سازی کرد؟

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.

مطالب این مطلب نیز پیشنهاد می‌شود

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم

سرور اختصاصی ایران

یک سرور با منابع کاملا اختصاصی در برتریرن مراکز داده داخلی.

سرور مجازی

یک ابزار مدیریتی بسیار کاربردی، با دسترسی‌های بیشتر از یک‌هاست ابری.

خرید هاست وردپرس

سرویس قوی و پایدار که برای نصب و راه‌اندازی سیستم مدیریت محتوای وردپرس بهینه شده است.

خرید هاست

تنها برای آن میزان از منابع سخت‌افزاری که نیاز دارید هزینه می‌پردازید و دیگر نیازی به پرداخت هزینه‌های غیر موجه، در ابتدای فعالیت وب سایت خود، نخواهید داشت.

خرید سرور ابری

با ابرسرورها می‌توانید سرور با سیستم‌عامل دلخواه خود را در چند دقیقه انتخاب و نصب نموده و آزادانه منابع سرور خود را کاهش و افزایش دهید.

خرید سرور اختصاصی

تمام منابع سرور در اختیار شماست و به راحتی می‌توانید تغییرات مدنظرتان را اعمال کنید. امنیت، سرعت و پایداری بالا برای میزبانی پروژه‌های بزرگ.