پیکربندی Apache HTTP با رویداد MPM و PHP-FPM در اوبونتو

وب سرور مجازی Apache HTTP طی سالها پیشرفت کرده و در محیط های مختلف کار می کند و نیازهای مختلف را برطرف می کند. یکی از مشکلات مهم Apache HTTP که مانند هر سرور مجازی وب باید حل شود ، نحوه مدیریت فرآیندهای مختلف برای ارائه یک درخواست پروتکل http است. این فرآیند شامل باز کردن سوکت ، پردازش درخواست ، باز نگه داشتن اتصال برای مدت معین ، رسیدگی به رویدادهای جدید در این ارتباط و بازگشت به محتوای تولید شده توسط برنامه ساخته شده به یک زبان خاص (مانند PHP ، Perl یا Python) است . این کارها توسط یک ماژول چند پردازشی (MPM) انجام و کنترل می شود.Apache HTTP با سه MPM متفاوت ارائه می شود:⦁ Pre-fork: یک فرآیند جدید برای هر اتصال ورودی به سرور مجازی ایجاد می شود. هر فرآیند از سایرین جدا شده است ، بنابراین هیچ حافظه ای بین آنها به اشتراک گذاشته نمی شود ، حتی اگر آنها در یک نقطه از اجرای خود تماس های یکسان را انجام دهند. این یک روش ایمن برای اجرای برنامه های مرتبط با کتابخانه هایی است که از رشته سازی پشتیبانی نمی کنند – به طور معمول برنامه ها یا کتابخانه های قدیمی تر.⦁ Worker: یک فرآیند parent (والد) وظیفه راه اندازی مجموعه ای از فرآیندهای child (فرزند) را بر عهده دارد ، که برخی از آنها در حال گوش دادن به اتصالات جدید ورودی هستند ، و برخی دیگر در حال ارائه محتوای درخواستی هستند. هر فرآیند تبدیل به رشته شده است (یک رشته واحد می تواند یک اتصال را کنترل کند) بنابراین یک فرآیند می تواند همزمان چندین درخواست را انجام دهد. این روش کار با اتصالات ، باعث استفاده بهتر از منابع میشود ، در حالی که همچنان ثبات را حفظ می کند. این نتیجه ای از مجموعه فرآیندهای موجود است که غالباً رشته های در دسترس را برای ارائه اتصالات جدید فوری به صورت رایگان ارائه می دهد.⦁ Event: بر اساس Worker ، این MPM با بهینه سازی چگونگی برنامه ریزی فرآیند والد وظایف را به فرآیندهای فرزند و رشته های مرتبط با آن ها یک قدم فراتر می گذارد. اتصال بصورت پیش فرض 5 ثانیه باز می ماند و در صورت عدم وقوع اتفاق جدید ، بسته می شود. این مقدار پیش فرض دستورالعمل keep-alive است، که رشته مربوط به آن را حفظ می کند. Event MPM فرایند را قادر می سازد تا رشته ها را مدیریت کند به گونه ای که برخی از رشته ها آزاد هستند که بتوانند اتصالات جدید ورودی را کنترل کنند در حالی که برخی دیگر به اتصالات زنده متصل هستند. اجازه توزیع مجدد وظایف اختصاص یافته به رشته ها باعث می شود تا استفاده و عملکرد بهینه منابع بیشتر شود.ماژول MPM Event یک ماژول چند پردازشی سریع است که در وب سرور مجازی Apache HTTP موجود است.PHP-FPM مدیر فرآیند FastCGI برای PHP است. پروتکل FastCGI بر پایه رابط مشترک گیت (CGI) ساخته شده است ، پروتکلی که بین برنامه ها و سرور مجازی های وب مانند Apache HTTP قرار دارد. این ویژگی اجازه می دهد تا توسعه دهندگان برنامه ها را جداگانه از رفتار سرور مجازی های وب بنویسند. برنامه ها فرآیندهای خود را بطور مستقل اجرا می کنند و محصول خود را از طریق این پروتکل به سرور مجازی وب منتقل می کنند. هر اتصال جدیدی که نیاز به پردازش توسط یک برنامه داشته باشد فرآیند جدیدی را ایجاد می کند.با ترکیبی از رویداد MPM در Apache HTTP با PHP FastCGI مدیر فرآیند (PHP-FPM) ، وب سایت می تواند سریعتر لود شده و ضمن استفاده از منابع کمتر ، اتصالات همزمان بیشتری را مدیریت کند.در این آموزش عملکرد پشته LAMP را با تغییر ماژول پیش فرض چند پردازشی از pre-fork به event و با استفاده از مدیر فرآیند PHP-FPM برای مدیریت کد PHP به جای mod_php کلاسیک در Apache HTTP بهبود می بخشید.پیش نیازهاقبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:• یک سرور مجازی Ubuntu 18.04 که طبق راهنمای ستاپ اولیه سرور مجازی Ubuntu 18.04 تنظیم ، و شامل یک کاربر sudo غیر ریشه و فایروال راه اندازی باشد.• پشته LAMP که طبق آموزش نحوه نصب Linux ، Apache ، MySQL ، PHP (LAMP stack) در اوبونتو 18.04 روی سرور مجازی شما نصب شده باشد.مرحله 1 – تغییر ماژول چند پردازشیاوبونتو برای فعال یا غیرفعال کردن ماژول های Apache HTTP از توزیع والد خود ، یعنی دبیان ، اسکریپت هایی را به ارث می برد. برای غیرفعال کردن ماژول Pre fork و فعال کردن ماژول Event از این مجموعه ابزار در این مرحله استفاده خواهید کرد.در این مرحله شما Apache HTTP را متوقف خواهید کرد ، ماژول PHP 7.2 را که به ماژول Pre-fork وصل شده است ، غیرفعال میکنید و سپس Pre-fork را غیرفعال میکنید تا بلافاصله ماژول Event فعال شود.ابتدا سرویس Apache HTTP را متوقف می کنید:⦁ $ sudo systemctl stop apache2⦁اکنون می توانید ماژول PHP 7.2 را که مربوط به ماژول Pre-fork است غیرفعال کنید:⦁ $ sudo a2dismod php7.2⦁سپس ماژول MPM Pre-fork MPM را غیرفعال کنید:⦁ $ sudo a2dismod mpm_prefork⦁اکنون ماژول Event MPM را فعال کنید:⦁ $ sudo a2enmod mpm_event⦁شما MPM را از Pre-fork به Event تغییر داده اید و اتصال ماژول PHP 7.2 را بین PHP و Apache HTTP حذف کرده اید. در مرحله بعدی ماژول php-fpm و همچنین کتابخانه ها و ماژول های پروکسی را نصب خواهید کرد. Apache HTTP را پیکربندی خواهید کرد تا بتواند با PHP نیز ارتباط برقرار کند.مرحله 2 – پیکربندی Apache HTTP برای استفاده از مدیر فرآیند FastCGIتا این جا روش پردازش اتصالات توسط Apache HTTP را با انتقال از MPM Pre-fork به Event تغییر داده اید. اما در طول راه ماژول PHP را که Apache HTTP را با هر برنامه اجرا شده در PHP وصل کرده است غیرفعال کرده اید.در این مرحله پردازنده PHP-FPM را نصب خواهید کرد تا Apache HTTP بتواند مجدداً برنامه های PHP را پردازش کند. و همچنین می توانید کتابخانه های متعلقات را نصب کنید و ماژول ها را فعال کنید تا هر دو بتوانند هموارتر و سریعتر از گذشته همکاری کنند.ابتدا php-fpm را نصب کنید. دستور زیر بسته PHP-FPM را نصب می کند و سرویس php7.2-fpm بصورت خودکار را که با systemd یکپارچه شده است فعال می کند ، بنابراین این سرویس در زمان بوت شروع می شود:⦁ sudo apt install php-fpm⦁برای برقراری ارتباط ، Apache HTTP و PHP به یک کتابخانه نیاز دارند که بتواند آن ظرفیت را داشته باشد. اکنون libapache2-mod-fcgid را نصب خواهید کرد ، که می تواند به عنوان واسط بین برنامه ها با سرور مجازی های وب سرویس دهی کند ، و مخصوص Apache HTTP است. این ارتباط از طریق سوکت یونیکس اتفاق می افتد.این کتابخانه را نصب کنید:⦁ $ sudo apt install libapache2-mod-fcgid⦁php-fpm و libapache2-mod-fcgid را نصب کرده اید ، اما هنوز هیچ کدان فعال نشده اند.ابتدا ماژول php-fpm را با دستور زیر فعال کنید:⦁ $ sudo a2enconf php7.2-fpm⦁سپس ماژول پروکسی HTTP Apacheرا فعال کنید.⦁ $ sudo a2enmod proxy⦁بعد از آن ماژول پروکسی FastCGI را در Apache HTTP فعال کنید:⦁ $ sudo a2enmod proxy_fcgi⦁توجه: می توانید پیکربندی این تعامل بین برنامه های PHP و Apache HTTP را از طریق سوکت UNIX با دستور زیر بخوانید:⦁ $ cat /etc/apache2/conf-enabled/php7.2-fpm.conf⦁همه چیز در حال حاضر آماده است بنابراین می توانید Apache HTTP را شروع کنید. ابتدا یک پیکربندی انجام می دهید:⦁ $ sudo apachectl configtest⦁OutputSyntax OKپس از آن می توانید Apache HTTP را رستارت کنید ، تا هنگام نصب کتابخانه FastCGI libapache2-mod-fcgid به طور خودکار شروع شود:⦁ $ sudo systemctl restart apache2⦁اکنون ماژول php-fpm را نصب ،و Apache HTTP را پیکربندی کرده اید تا با آن کار کند ، ماژول های لازم را برای کار با پروتکل FastCGI فعال کرده و خدمات مربوطه را شروع نموده اید.اکنون که Apache ماژول Event MPM را فعال کرده است و PHP-FPM در آن حضور دارد و در حال اجرا است ، زمان آن رسیده است که همه چیز بررسی شود تا مطمئن شویم طبق پیش بینی عمل میکند.مرحله 3 – پیکربندی خود را بررسی کنیدبه منظور بررسی اینکه تغییرات پیکربندی اعمال شده اند ، برخی از آزمایشات را اجرا خواهید کرد. اولین تست بررسی میکند که ماژول چند پردازشی Apache HTTP استفاده می شود. تست دوم تأیید می کند که PHP از مدیر FPM استفاده می کند.با اجرای دستور زیر سرور مجازی Apache HTTP را بررسی کنید:⦁ $ sudo apachectl -M | grep ‘mpm’⦁خروجی شما به شرح زیر خواهد بود:Outputmpm_event_module (shared)می توانید همین کار را برای ماژول پروکسی و FastCGI تکرار کنید:⦁ $ sudo apachectl -M | grep ‘proxy’⦁خروجی نشان داده شده اینگونه است:Outputproxy_module (shared)proxy_fcgi_module (shared)اگر دوست دارید کل لیست ماژول ها را ببینید ، می توانید قسمت دوم دستور را بعد از -M حذف کنید.اکنون زمان آن رسیده است که بررسی کنیم PHP از مدیر پردازشگر FastCGI استفاده می کند یا خیر. برای این کار یک اسکریپت کوچک PHP بنویسید که تمام اطلاعات مربوط به PHP را به شما نشان می دهد.دستور زیر را برای نوشتن فایلی به نام زیر اجرا کنید:⦁ $ sudo nano /var/www/your_domain/info.php⦁محتوای زیر را در فایل info.php اضافه کنید:info.php<?php phpinfo(); ?>اکنون به آدرس URL سرور مجازی خود مراجعه کرده و در انتها info.php را اضافه کنید. به این شکل:http://your_domain/info.phpورودی API سرور مجازی FPM / FastCGI خواهد بود.بعد از این بررسی فایل info.php را حذف کنید تا هیچ گونه اطلاعاتی در مورد سرور مجازی به صورت عمومی فاش نشود:⦁ $ sudo rm /var/www/yourdomain.com/info.php⦁در حال حاضر وضعیت کار ماژول MPM ، ماژول های مدیریت FastCGI و نحوه استفاده از کد PHP را بررسی کرده اید.نتیجهشما پشته LAMP اصلی خود را بهینه کرده اید ، بنابراین تعداد اتصالات برای ایجاد فرآیندهای جدید Apache HTTP افزایش یافته است ، PHP-FPM با کد PHP کارآمدتر عمل می کند ، و استفاده کلی از منابع بهبود یافته است.برای اطلاعات بیشتر در مورد ماژول های مختلف و پروژه های مرتبط ، به مطالب پروژه سرور مجازی Apache HTTP مراجعه کنید.برچسب‌ها:Apache HTTP, CGI, FastCGI, HTTP, keep-alive, MPM, Python, Worker