Gần đây mình vô tình lướt trên blog của Cloudflare thì nghe nói họ đã hỗ trợ bản vá để hỗ trợ giao thức mới là HTTP/3 và QUIC trong Nginx. Và mình cũng đang muốn chuyển dịch vụ máy chủ web sang một nhà cung cấp khác để tiết kiệm chi phí nên mình đã quyết định cài đặt Nginx kèm bản vá của họ xem sao.

Sau một vài ngày cố gắng cài đặt cũng như thử nghiệm qua thì mình thấy ngon, bổ nhưng mà lại không rẻ vì nó miễn phí. Đây không phải là bản chính thức của Nginx, nhưng nếu bạn muốn thử thì ghé thăm dự án quiche của Cloudflare để có thêm thông tin và chi tiết về cách cài đặt nhé.

Cài đặt Nginx với Quiche

Dưới đây mình không hướng dẫn chi tiết, bạn cần phải biết cách cài đặt nginx từ nguồn (source) và cấu hình SSL cho nginx nhé.

  1. Bước đầu tiên là tải xuống và giải nén mã nguồn NGINX . Lưu ý rằng bản vá HTTP/3 và QUIC chỉ hoạt động với nhánh phát hành 1.16.x (bản phát hành ổn định mới nhất là 1.16.1). Cũng có những bản vá hỗ trợ cho cả phiên bản Nginx mới nhất là 1.23.2 nhưng mình dùng 1.16.1.
    curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
    tar xzvf nginx-1.16.1.tar.gz
  2. Clone Quiche về, lệnh dưới cũng sẽ clone boringssl cần thiết để hỗ trợ QUIC:
    git clone --recursive https://github.com/cloudflare/quiche
  3. Áp dụng bản vá cho Nginx:
    cd nginx-1.16.1
    patch -p01 < ../quiche/nginx/nginx-1.16.patch
  4. Xây dựng Nginx, mình sẽ cài đặt Nginx vào thư mục /usr/local/nginx:
    ./configure                                 \
           --prefix=/usr/local/nginx                 \
           --build="quiche-$(git --git-dir=../quiche/.git rev-parse --short HEAD)" \
           --with-http_ssl_module                  \
           --with-http_v2_module                   \
           --with-http_v3_module                   \
           --with-openssl=../quiche/quiche/deps/boringssl \
           --with-quiche=../quiche
    make
    sudo make install
  5. Kiểm tra phiên bản Nginx, bạn sẽ nhìn thấy nó được cài đặt với boringssl:
    /usr/local/nginx/sbin/nginx -V

Vậy là xong việc cài Nginx, giờ phải cấu hình cho Nginx sử dụng QUIC. So với bản Nginx chính thức thì bản vá này chỉ có một số khác biệt thôi. Dưới đây là một cấu hình ví dụ trong nginx.conf:

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3=":443"; ma=86400';
    }
}

Lưu ý:

  • reuseport chỉ được sử dụng trong một khối server {} thôi nhé, không được khai báo nó trong nhiều hơn một khối.
  • TLSv1.3 phải được sử dụng để hỗ trợ QUIC.
  • add_header alt-svc nói cho trình duyệt biết máy chủ hỗ trợ giao thức h3 qua cổng 443.
  • Vì QUIC sử dụng UDP nên bạn nhớ cho phép kết nối qua cổng (ví dụ 443) và giao thức UDP trong tường lửa nhé.

Kiểm tra HTTP/3 và QUIC

Dưới đây là một vài cách mà mình dùng để kiểm tra xem máy chủ Nginx mà mình đã cài có hỗ trợ HTTP/3 và QUIC hay chưa.

  • Truy cập http3check và nhập tên miền của bạn để kiểm tra.
    Kiểm tra HTTP/3 và QUIC với http3check.net
  • Sử dụng công cụ nhà phát triển trên Firefox.
    Kiểm tra QUIC và HTTP/3 bằng Firefox
  • Sử dụng trình duyệt Chrome trên Android, sau khi truy cập vào trang web, bấm vào biểu tưởng ổ khóa trên thanh địa chỉ, chọn Kết nối an toàn.
    Kiểm tra QUIC và HTTP/3 sử dụng Chrome trên Android

Nginx đang phát triển một nhánh hỗ trợ HTTP/3 và QUIC là nginx-quic và sẽ hợp nhất vào phiên bản chính thức. Bạn có thể chờ nếu không muốn sử dụng nhánh này hoặc các bản vá từ cộng đồng. Theo mình được biết thì OpenLiteSpeed đã chính thức hỗ trợ HTTP/3 và QUIC nhưng mình chưa tìm hiểu qua.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *