آپاچی؛ شب ۱۵: HTTP/2 و انتخاب MPM
فهرست نوشته
HTTP/2 چند جریان درخواست را روی یک اتصال حمل میکند. امشب آن را روی HTTPS فعال میکنیم و همزمان مدل کارگر Apache را بررسی میکنیم تا قابلیت جدید با مدل PHP بعدی سازگار باشد.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: سایت TLS ثابت؛ هنوز mod_php نصب نشده؛ curl دارای پشتیبانی HTTP2.
event و prefork#
MPM یا Multi-Processing Module مدل کارگرهای Apache است. prefork عمدتاً بر فرایندهای جدا و event بر threadها و مدیریت اتصالهای بیکار تکیه دارد. mod_php رایج توزیعهای Debian معمولاً prefork میخواهد؛ مسیر اصلی این دوره event + PHP-FPM خواهد بود.
sudo "$APACHE_CTL" -M
curl -V
در Debian/Ubuntu، اگر prefork فعال است ابتدا نبودن ماژول PHP ناسازگار را تأیید کن، سپس a2dismod mpm_prefork و a2enmod mpm_event http2 را با sudo اجرا کن. در Alma/Rocky sudo dnf install mod_http2 و فایل conf.modules.d/00-mpm.conf را بررسی کن؛ فقط یک MPM بارگذاری شود.
در میزبان HTTPS:
Protocols h2 http/1.1
تغییر MPM به restart نیاز دارد؛ بعد از آزمون نحو، در پنجرهٔ آزمایش sudo systemctl restart "$APACHE_SERVICE" را اجرا کن. HTTP/2 سمت کلاینت به معنی HTTP/2 بودن ارتباط Apache با backend نیست.
اندازهگیری نتیجه#
curl --http2 --cacert ~/apache-lab/pki/ca.crt \
--resolve www.example.test:443:192.168.56.10 \
-sS -o /dev/null -w '%{http_version}\n' https://www.example.test/
curl --http1.1 --cacert ~/apache-lab/pki/ca.crt \
--resolve www.example.test:443:192.168.56.10 -I https://www.example.test/
انتظار داریم اولی نسخهٔ 2 و دومی پاسخ سالم HTTP/1.1 بدهد. نبودن HTTP2 در curl -V محدودیت کلاینت است. prefork برای پردازش همزمان HTTP/2 محدودیت دارد؛ خطا و رفتار دقیق را با نسخهٔ نصبشده و راهنمای رسمی بسنج، صرف دیدن ماژول کافی نیست.
بازگشت: Protocols را به http/1.1 محدود کن و در صورت بازگرداندن MPM، مجموعهٔ ماژول سازگار قبلی را با restart بازیابی کن. برای درس mod_php از Clone مستقل استفاده میکنیم.
منبع: HTTP/2 در Apache ، MPM event .