آپاچی؛ شب ۳۲: PHP با mod_php روی Debian و Ubuntu
فهرست نوشته
mod_php کد PHP را داخل کارگرهای Apache اجرا میکند. امشب آن را در Clone مستقل میآزماییم؛ مسیر اصلی event و PHP-FPM دوره را پس از آزمایش بازیابی میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: Clone Debian 13 یا Ubuntu 24.04؛ PHP_BRANCH بهترتیب 8.4 یا 8.3. این تمرین روی Alma/Rocky 9 با بستهٔ پیشفرض mod_php انجام نمیشود.
تغییر مدل کارگر با downtime مشخص#
Snapshot و config ماژولها را حفظ کن. در Clone، handlerهای FPM/CGI قبلی نباید فعال باشند. Protocols سایت را به http/1.1 محدود کن و ماژول http2 را برای این شاخه غیرفعال کن. سپس:
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo apt install "libapache2-mod-php${PHP_BRANCH}" "php${PHP_BRANCH}-cli"
sudo apache2ctl -t
sudo systemctl restart apache2
sudo apache2ctl -M
مدل رایج بستهٔ mod_php این توزیعها با prefork سازگار است؛ تغییر MPM به restart و قطع احتمالی درخواستهای جاری نیاز دارد. وجود فقط یک MPM و ماژول PHP صحیح را از خروجی واقعی تأیید کن.
در /var/www/apache-lab/public/check.php فقط این آزمون بدون راز را بگذار:
<?php
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n";
از HTTPS درخواست بده. نتیجهٔ مورد انتظار SAPI برابر apache2handler است؛ SAPI رابط PHP با محیط اجراست. php -v نسخهٔ خط فرمان را نشان میدهد و ثابت نمیکند وبسرور از همان تنظیمات استفاده میکند.
php.ini درست#
فایل شاخهٔ Apache در /etc/php/PHP_BRANCH/apache2/php.ini است؛ مقدار PHP_BRANCH در مسیر باید به شمارهٔ واقعی تبدیل شود. تغییر /cli/php.ini الزاماً روی درخواست وب اثر ندارد. از صفحهٔ phpinfo عمومی برای تشخیص نسخه استفاده نکن؛ دادهٔ زیادی دربارهٔ محیط نشان میدهد.
آزمون و بازگشت: فایل check را پس از آزمون حذف کن. اگر سورس PHP برگردد، انتشار را متوقف و handler را اصلاح کن. برای ادامهٔ مسیر اصلی Snapshot را بازیابی کن؛ در بازگشت دستی ابتدا ماژول PHP را غیرفعال، prefork را خاموش و event/http2 را با تنظیم سازگار و restart بازگردان.
منبع: PHP با Apache 2 در راهنمای PHP ، PHP در Ubuntu Server .