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 .