نحوه راه اندازی استخرهای جداگانه PHP-FPM در NGINX
منتشر شده: ۱۵ فوریهٔ ۲۰۲۵ ساعت ۱۱:۵۴:۳۳ (UTC)
آخرین به روز رسانی: ۱۲ ژانویهٔ ۲۰۲۶ ساعت ۸:۳۰:۱۳ (UTC)
در این مقاله، مراحل پیکربندی مورد نیاز برای اجرای چندین PHP-FPM Pool و اتصال NGINX به آنها از طریق FastCGI را بررسی میکنم که امکان جداسازی فرآیند و ایزوله کردن بین میزبانهای مجازی را فراهم میکند.
How to Set Up Separate PHP-FPM Pools in NGINX
اطلاعات موجود در این پست بر اساس NGINX 1.4.6 و PHP-FPM 5.5.9 است که روی Ubuntu Server 14.04 x64 اجرا میشوند. ممکن است برای نسخههای دیگر معتبر باشد یا نباشد. (بهروزرسانی: میتوانم تأیید کنم که از Ubuntu Server 24.04، PHP-FPM 8.3 و NGINX 1.24.0، تمام دستورالعملهای این پست هنوز کار میکنند.)
راهاندازی چندین مخزن فرآیند فرزند PHP-FPM به جای اجرای همه فرآیندها در یک مخزن، مزایای متعددی دارد. امنیت، جداسازی/ایزولهسازی و مدیریت منابع از جمله مهمترین این مزایا هستند.
صرف نظر از انگیزه شما، این پست به شما کمک میکند تا این کار را انجام دهید :-)
بخش ۱ - راهاندازی یک مخزن جدید PHP-FPM
ابتدا باید دایرکتوری که PHP-FPM پیکربندیهای استخر خود را در آن ذخیره میکند، پیدا کنید. در اوبونتو ۱۴.۰۴، این دایرکتوری به طور پیشفرض /etc/php5/fpm/pool.d است. احتمالاً از قبل فایلی به نام www.conf در آنجا وجود دارد که پیکربندی استخر پیشفرض را در خود جای داده است. اگر قبلاً به آن فایل نگاه نکردهاید، احتمالاً باید آن را بررسی کرده و تنظیمات موجود در آن را برای تنظیمات خود تغییر دهید زیرا تنظیمات پیشفرض برای یک سرور نسبتاً ضعیف است، اما فعلاً فقط یک کپی از آن تهیه کنید تا مجبور نباشیم از ابتدا شروع کنیم:
البته، به جای «mypool» هر نامی که میخواهید برای استخر خود انتخاب کنید را قرار دهید.
حالا فایل جدید را با استفاده از nano یا هر ویرایشگر متنی که ترجیح میدهید باز کنید و آن را متناسب با هدف خود تنظیم کنید. احتمالاً میخواهید تعداد پردازشهای فرزند و احتمالاً کاربر و گروهی که استخر تحت آن اجرا میشود را تغییر دهید، اما دو تنظیمی که قطعاً باید تغییر دهید نام استخر و سوکتی است که به آن گوش میدهد، در غیر این صورت با استخر موجود تداخل پیدا میکند و همه چیز از کار میافتد.
نام استخر تقریباً در بالای فایل و در داخل کروشه قرار دارد. به طور پیشفرض [www] است. این را به هر چیزی که میخواهید تغییر دهید؛ من همان نامی را که برای فایل پیکربندی انتخاب کردید پیشنهاد میکنم، بنابراین برای این مثال آن را به [mypool] تغییر دهید. اگر آن را تغییر ندهید، به نظر میرسد که PHP-FPM فقط اولین فایل پیکربندی با آن نام را بارگذاری میکند، که احتمالاً باعث خرابی میشود.
سپس باید سوکت یا آدرسی را که به آن گوش میدهید، تغییر دهید، که توسط دستور listen تعریف شده است. به طور پیشفرض، PHP-FPM از سوکتهای یونیکس استفاده میکند، بنابراین دستور listen شما احتمالاً به این شکل خواهد بود:
میتوانید آن را به هر نام معتبری که میخواهید تغییر دهید، اما باز هم پیشنهاد میکنم چیزی شبیه به نام فایل پیکربندی را انتخاب کنید، مثلاً میتوانید آن را به صورت زیر تنظیم کنید:
بسیار خب، فایل را ذخیره کنید و از ویرایشگر متن خارج شوید.
بخش ۲ - بهروزرسانی پیکربندی میزبان مجازی NGINX
حالا باید فایل میزبان مجازی NGINX را با پیکربندی FastCGI که میخواهید به یک pool جدید تغییر دهید باز کنید - یا بهتر بگوییم، به سوکت جدید متصل شوید.
به طور پیشفرض در اوبونتو ۱۴.۰۴، این فایلها در مسیر /etc/nginx/sites-available ذخیره میشوند، اما میتوانند در جای دیگری نیز تعریف شوند. احتمالاً شما بهتر میدانید که پیکربندیهای میزبان مجازی شما کجا قرار دارند ;-)
فایل پیکربندی مربوطه را در ویرایشگر متن مورد علاقه خود باز کنید و به دنبال دستورالعمل fastcgi_pass (که باید در یک زمینه مکانی باشد) باشید که سوکت PHP-FPM را تعریف میکند. شما باید این مقدار را طوری تغییر دهید که با پیکربندی جدید PHP-FPM pool که در مرحله اول ایجاد کردهاید، مطابقت داشته باشد، بنابراین در ادامه مثال ما، این مقدار را به صورت زیر تغییر دهید:
fastcgi_pass یونیکس:/var/run/php5-fpm-mypool.sock;
سپس آن فایل را نیز ذخیره کنید و ببندید. اکنون تقریباً کار تمام است.
بخش ۳ - راهاندازی مجدد PHP-FPM و NGINX
برای اعمال تغییرات پیکربندی که ایجاد کردهاید، هر دو سرویس PHP-FPM و NGINX را مجدداً راهاندازی کنید. ممکن است بارگذاری مجدد به جای راهاندازی مجدد کافی باشد، اما به نظر من بسته به اینکه کدام تنظیمات تغییر داده شوند، کمی تصادفی است. در مورد خاص، من میخواستم فرآیندهای فرزند قدیمی PHP-FPM فوراً از بین بروند، بنابراین راهاندازی مجدد PHP-FPM لازم بود، اما برای NGINX ممکن است بارگذاری مجدد کافی باشد. خودتان آن را امتحان کنید.
sudo service nginx restart
و تمام. اگر همه کارها را به درستی انجام داده باشید، میزبان مجازی که تغییر دادهاید اکنون باید از مجموعه جدید PHP-FPM استفاده کند و فرآیندهای فرزند را با هیچ میزبان مجازی دیگری به اشتراک نگذارد.
