โดย http3_module นี้เข้ากันได้กับ BoringSSL, LibreSSL และ QuicTLS
วันนี้จะมาคอมไพล์ Nginx + BoringSSL เพื่อใช้งาน HTTP3 กัน
คอมไพล์ BoringSSL
เปิดการใช้งาน Repo CRB
dnf config-manager --set-enabled crbติดตั้งแพ็กเกจที่จำเป็น
dnf install -y git cmake ninja-build golang gcc-c++Git clone BoringSSL
git clone "https://boringssl.googlesource.com/boringssl"เข้าไปยังไดเรคทอรี่ที่โคลนมา
cd boringsslทำการคอมไพล์
cmake -GNinja -B build ninja -C buildเป็นอันเสร็จสิ้นสำหรับ BoringSSL
จากนั้นเราเริ่มทำการติดตั้ง Nginx 1.25.3
ติดตั้งแพ็กเกจที่จำเป็น
dnf install -y wget pcre-devel zlib-develดาวน์โหลด Nginx 1.25.3 source
wget https://nginx.org/download/nginx-1.25.3.tar.gzแตกไฟล์
tar xf nginx-1.25.3.tar.gzเข้าไปยังไดเรคทอรี่
cd nginx-1.25.3ตั้งค่าก่อนคอมไพล์ โดย BoringSSL และ Nginx นี้อยู่ในไดเรคทอรี่เดียวกัน
./configure --with-http_ssl_module --with-http_v2_module --with-http_v3_module --with-cc-opt=-I../boringssl/include --with-ld-opt='-L../boringssl/build/ssl -L../boringssl/build/crypto'ทำการคอมไพล์และติดตั้ง
make make installจากนั้นเขียนไฟล์ service สำหรับ systemd
nano /etc/systemd/system/nginx.serviceโดยใส่ข้อมูลตามนี้
[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.targetเปิดการใช้งาน nginx.service
systemctl enable nginx.service
สร้างไฟล์ DH param เพื่อเพิ่มความปลอดภัยให้ระบบ
openssl dhparam -out /usr/local/nginx/conf/dh4096.pem 4096
ตั้งค่า Nginx
ืnano /usr/local/nginx/conf/nginx.confโดยแก้ไขค่าต่อไปนี้
pid /var/run/nginx.pid; ....... server { listen 443 quic reuseport; listen 443 ssl; server_name mydomain.com; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate ca-bundle.pem; ssl_certificate mydomain.crt; ssl_certificate_key mydomain.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256"; ssl_prefer_server_ciphers on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_ecdh_curve prime256v1; ssl_dhparam dh4096.pem; ssl_buffer_size 16k; location / { add_header Alt-Svc 'h3=":443"; ma=86400'; root html; index index.html index.htm; } } }ส่วนสำคัญคือ ต้องประกาศ ให้ใช้ port เดียวกับ https
listen 443 quic reuseport; listen 443 ssl;และทำการประกาศช่องทางเลือกสำหรับ http3 ใน header เพื่อให้ browser เลือกใช้งานได้
add_header Alt-Svc 'h3=":443"; ma=86400';
จากนั้นทำการเริ่มการทำงาน nginx
systemctl start nginx.service
ก่อนจะไปทดสอบ ต้องเปิด port ที่จำเป็นก่อน
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --permanent --add-port=443/udp firewall-cmd --reloadจากนั้นลองเข้าทดสอบที่ http3check.net
เสร็จสมบูรณ์