Giao thức truyền siêu văn bản phiên bản 2 (HTTP/2) là phiên bản mới nhất của giao thức HTTP, được công bố dưới dạng tiêu chuẩn IETF trong RFC 7540 vào năm 2015. Trọng tâm của giao thức là hiệu suất; cụ thể là độ trễ được người dùng cuối cảm nhận, mạng và mức sử dụng tài nguyên máy chủ. Một mục tiêu chính là cho phép sử dụng một kết nối duy nhất từ trình duyệt đến một trang web. Giao thức này tương thích ngược, do đó các phương thức HTTP, mã trạng thái và ngữ nghĩa giống như các phiên bản trước của giao thức. Apache đã hỗ trợ HTTP/2 kể từ phiên bản 2.4.17. Trong hướng dẫn này, tôi sẽ giả định rằng bạn đã có cấu hình TLS đang hoạt động và đã cài đặt phiên bản Apache bắt buộc trên bản phân phối Linux bạn chọn và bạn biết cách sử dụng Let's Encrypt hoặc bạn biết cách cấp chứng chỉ tự ký.
Hướng dẫn này đã được thử nghiệm trên Debian 11, Debian 10, Debian 9, Ubuntu 22.04 LTS, Ubuntu 20.04 LTS và Ubuntu 18.04 LTS.
Ubuntu 22.04 LTS
Debian 11
Ubuntu 20.04 LTS
Debian 10
Ubuntu 18.04 LTS
Debian 9
Đầu tiên, chúng ta vô hiệu hóa mô-đun mpm_prefork:
Sau đó, chúng ta kích hoạt mô-đun mpm_event:
và sau đó
Để kích hoạt các module mới này, bạn cần chạy:
Sau khi bật và tải các module Apache cần thiết, hãy điều hướng đến thư mục cấu hình Apache của bạn và chỉnh sửa Apacheconfiguration.
Để bật HTTP/2 trên máy chủ web Apache của bạn, hãy thêm một trong những lệnh sau vào cấu hình Apache toàn cục của bạn hoặc bên trong một máy chủ ảo cụ thể.
Sau đây là cấu hình máy chủ ảo tối thiểu có thể được sử dụng để bật HTTP/2 trong một số máy chủ ảo:
Để kiểm tra xem máy chủ của bạn có hỗ trợ HTTP/2 không, bạn có thể sử dụng công cụ phát triển trình duyệt của mình. Dưới đây là ảnh chụp màn hình từ trình duyệt Google Chrome và Apple Safari cho thấy HTTP/2 đang hoạt động trên miền
.
Chrome
Safari
Hướng dẫn này đã được thử nghiệm trên Debian 11, Debian 10, Debian 9, Ubuntu 22.04 LTS, Ubuntu 20.04 LTS và Ubuntu 18.04 LTS.
Điều kiện tiên quyết
Để bật HTTP/2 trong Apache, bạn sẽ cần đáp ứng các yêu cầu sau:- Trước tiên, bạn cần bật HTTPS trên máy chủ của mình. Tất cả các trình duyệt chính chỉ cho phép sử dụng HTTP/2 qua HTTPS. Ngoài ra,cần có phiên bản giao thức TLS >= 1.2 với bộ mã hóa hiện đại.
- Tiếp theo, hãy đảm bảo rằng bạn đang chạy Apache 2.4.17 trở lên vì HTTP/2 được hỗ trợ từ phiên bản này trở lên.
- Ngoài ra, hãy đảm bảo rằng máy khách/trình duyệt của bạn thực sự hỗ trợ HTTP/2.
Vô hiệu hóa mô-đun mod_php
Trước khi chúng ta có thể chuyển mô-đun Apache MPM trong bước tiếp theo sang mpm_event, chúng ta sẽ phải vô hiệu hóa chế độ mod_php cũ và thay thế bằng chế độ PHP-FPM hiện đại hơn. Các lệnh khác nhau cho từng phiên bản Hệ điều hành, vui lòng sử dụng lệnh phù hợp với hệ thống đã cài đặt của bạn.Ubuntu 22.04 LTS
Mã:
sudo apt-get install php8.1-fpm
sudo a2dismod php8.1
sudo a2enconf php8.1-fpm
sudo a2enmod proxy_fcgi
Mã:
sudoapt-get install php7.4-fpm
sudoa2dismod php7.4
sudoa2enconf php7.4-fpm
sudoa2enmod proxy_fcgi
Mã:
sudo apt-get install php7.4-fpm
sudo a2dismod php7.4
sudo a2enconf php7.4-fpm
sudo a2enmod proxy_fcgi
Mã:
sudoapt-get installphp7.3-fpm
sudoa2dismod php7.3
sudoa2enconf php7.3-fpm
sudoa2enmod proxy_fcgi
Mã:
sudo apt-get installphp7.2-fpm
sudo a2dismod php7.2
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
Mã:
sudoapt-get installphp7.0-fpm
sudoa2dismod php7.0
sudoa2enconf php7.0-fpm
sudoa2enmod proxy_fcgi
Kích hoạt Apache MPM tương thích với HTTP/2
Theo mặc định, Apache sẽ sử dụng prefork MPM. MPM này không tương thích với HTTP/2, vì vậy chúng ta sẽ phải thay thế nó bằng mô-đun mpm_event hiện đại hơn.Đầu tiên, chúng ta vô hiệu hóa mô-đun mpm_prefork:
Mã:
sudo a2dismod mpm_prefork
Mã:
sudo a2enmod mpm_event
Kích hoạt hỗ trợ HTTP/2 trong Apache
Để HTTP/2 hoạt động trên Apache, bạn cần kích hoạt và tải các mô-đun SSL và HTTP/2. Để thực hiện, bạn có thể chạy lệnh sau trong terminal của mình:
Mã:
sudo a2enmod ssl
Mã:
sudo a2enmod http2
Mã:
sudosystemctl restart apache2
Để bật HTTP/2 trên máy chủ web Apache của bạn, hãy thêm một trong những lệnh sau vào cấu hình Apache toàn cục của bạn hoặc bên trong một máy chủ ảo cụ thể.
Mã:
[B]Giao thức h2 http/1.1[/b]
Mã:
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/public_html/example.com
SSLEngine trên
SSLCertificateKeyFile /path/to/private.pem
SSLCertificateFile /path/to/cert.pem
SSLProtocol tất cả -SSLv3 -TLSv1 -TLSv1.1
[B] Giao thức h2 http/1.1[/b]
Chrome
Safari