PHP-FPM اجرای PHP را از کارگرهای Apache جدا می‌کند. امشب یک pool محدود می‌سازیم، Apache event را نگه می‌داریم و نبودن FPM را نیز آزمایش می‌کنیم.

این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نام‌ها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.

محیط: مسیر اصلی Debian/Ubuntu با event، بدون mod_php و Action آزمایش CGI؛ PHP_BRANCH برابر شاخهٔ واقعی توزیع.

نصب و pool اختصاصی lab#

sudo apt install "php${PHP_BRANCH}-fpm" "php${PHP_BRANCH}-cli"
sudo a2enmod proxy proxy_fcgi setenvif

اگر conf سراسری phpPHP_BRANCH-fpm فعال است، آن را با نام واقعی و a2disconf غیرفعال کن؛ این درس handler را فقط در میزبان موردنظر می‌گذارد. فایل /etc/php/PHP_BRANCH/fpm/pool.d/lab.conf:

[lab]
user = www-data
group = www-data
listen = /run/php/lab.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 4
pm.process_idle_timeout = 10s
pm.max_requests = 300
clear_env = yes
security.limit_extensions = .php
php_admin_value[cgi.fix_pathinfo] = 0

pool مجموعهٔ کارگرهایی با تنظیم و هویت مشخص است. Unix socket ارتباط محلی Apache و FPM را بدون پورت عمومی فراهم می‌کند. حالت 0660 اجازهٔ اتصال را به کاربر و گروه تعیین‌شده می‌دهد.

در میزبان HTTPS www:

<FilesMatch "\.php$">
    SetHandler "proxy:unix:/run/php/lab.sock|fcgi://localhost/"
</FilesMatch>

handlerهای PHP دیگر در همین میزبان نباید با این مورد رقابت کنند. سپس:

sudo "php-fpm${PHP_BRANCH}" -t
sudo systemctl enable --now "php${PHP_BRANCH}-fpm"
sudo systemctl restart "php${PHP_BRANCH}-fpm"
sudo "$APACHE_CTL" -t
sudo systemctl reload "$APACHE_SERVICE"

آزمون مدل اجرا#

check.php شب سی‌ودوم باید fpm-fcgi بدهد؛ خروجی -M باید event را نشان دهد. وجود و مجوز socket را با ls -l /run/php/lab.sock بررسی کن. FPM را موقتاً متوقف کن و درخواست تازه بفرست؛ باید خطای 5xx بگیری، سورس PHP نباید منتشر شود. سرویس را دوباره راه‌اندازی کن.

بازگشت: handler را همراه وضعیت انتشار فایل‌های PHP مدیریت کن؛ حذف handler از سایت دارای سورس PHP می‌تواند آن‌ها را ثابت منتشر کند. برای برگشت ایمن، سایت را ابتدا از دسترس خارج و سپس config سالم را بازیابی کن.

منبع: FastCGI در Apache ، تنظیم pool در PHP-FPM .