HTTP/2 چند جریان درخواست را روی یک اتصال حمل می‌کند. امشب آن را با نحو سازگار نسخه فعال و سیاست TLS و HSTS را با امکان بازگشت تنظیم می‌کنیم.

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

محیط: HTTPS معتبر، curl دارای قابلیت HTTP2 و نسخهٔ Nginx ثبت‌شده؛ سیاست crypto توزیع بررسی شود.

نسخهٔ directive را انتخاب کن#

در HTTP_LAB برای پایهٔ مشترک TLS:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:LABTLS:10m;
ssl_session_timeout 10m;

Cipherها را بر اساس قابلیت OpenSSL، policy توزیع و مشتری واقعی انتخاب کن؛ کپی فهرست قدیمی جای تحلیل سازگاری نیست. این پیکربندی TLS 1.0/1.1 را مجاز نمی‌کند.

برای Nginx از 1.25.1 به بعد، داخل server HTTPS:

listen 443 ssl;
http2 on;

برای بستهٔ قدیمی‌تر، مانند پایهٔ Ubuntu 24.04:

listen 443 ssl http2;

این دو الگو جایگزین یکدیگرند. در الگوی قدیمی گزینه‌های listener مشترک 443 را در تمام serverها، از جمله default و سایت‌های بعدی، هماهنگ کن تا هشدار protocol options نسازی. وجود HTTP/2 سمت کلاینت، نسخهٔ ارتباط backend را تعیین نمی‌کند.

HSTS مرحله‌ای#

در server HTTPS www:

add_header Strict-Transport-Security "max-age=300" always;

HSTS مرورگر را برای مراجعهٔ بعدی به HTTPS متعهد می‌کند. فعلاً includeSubDomains و preload نگذار. با curl و CA معتبر، --http2 -w '%{http_version}\n' باید نسخهٔ 2 و --http1.1 باید پاسخ سازگار بدهد. نسخهٔ TLS نامجاز را جدا آزمایش کن؛ شکست محلی cipher در کلاینت الزاماً رد شدن توسط سرور نیست.

بازگشت: Protocol و HTTP/2 را از backup برگردان. حذف هدر HSTS اثر ذخیره‌شده در مرورگر را فوری پاک نمی‌کند؛ max-age=0 را روی HTTPS معتبر ارسال کن یا تا انقضا منتظر بمان.

منبع: HTTP/2 ، TLS ، HSTS .