Nginx là một trong những máy chủ web mã nguồn mở hàng đầu, nổi bật với hiệu suất cao, khả năng mở rộng linh hoạt và mức tiêu thụ tài nguyên thấp. Nhờ khả năng hỗ trợ nhiều giao thức hiện đại và cấu hình đơn giản, Nginx đã trở thành lựa chọn hàng đầu cho các hệ thống web có lưu lượng truy cập lớn.
Trong bối cảnh web ngày càng phát triển, HTTP/2 đã ra đời như một bản nâng cấp quan trọng so với HTTP/1.1 – giao thức đã tồn tại hơn hai thập kỷ. Trước đây, HTTP/1.1 yêu cầu tải tuần tự từng phần tử của trang web, khiến tốc độ tải trang bị giới hạn. Trong khi đó, một website hiện đại có thể cần xử lý hàng trăm yêu cầu HTTP cho hình ảnh, tệp JavaScript, CSS và các tài nguyên khác.
- HTTP/2 cải thiện hiệu suất đáng kể với những thay đổi quan trọng:
- Tải dữ liệu song song – Không còn tình trạng chờ đợi theo hàng đợi như HTTP/1.1
- Nén HTTP header – Giảm băng thông tiêu thụ
- Truyền dữ liệu nhị phân – Hiệu suất xử lý nhanh hơn so với văn bản thuần túy
- Server Push – Máy chủ có thể chủ động gửi dữ liệu đến trình duyệt trước khi nhận yêu cầu, giúp tối ưu tốc độ tải trang
Mặc dù HTTP/2 không yêu cầu bắt buộc sử dụng mã hóa, nhưng các trình duyệt hàng đầu như Google Chrome và Mozilla Firefox đã đặt điều kiện chỉ hỗ trợ HTTP/2 với các kết nối HTTPS. Vì vậy, nếu bạn muốn tận dụng toàn bộ lợi ích của HTTP/2, bạn cần tích hợp chứng chỉ SSL/TLS để bảo mật máy chủ của mình.
Bạn đang tìm cách tối ưu website với Nginx và HTTP/2 trên Ubuntu 18.04? Hãy bắt đầu với một VPS giá rẻ, chất lượng cao để đảm bảo hiệu suất tốt nhất. Khám phá các gói VPS giá rẻ tại DataOnline để triển khai server mạnh mẽ, tiết kiệm chi phí!
DataOnline sẽ hướng dẫn bạn học cách cấu hình Nginx để hỗ trợ HTTP/2 một cách an toàn, tối ưu hóa hiệu suất và đảm bảo trang web của bạn hoạt động nhanh hơn, bảo mật hơn.
Yêu cầu
Trước khi bắt đầu, bạn cần chuẩn bị những thứ sau:
● Một máy chủ Ubuntu 18.04 được thiết lập theo hướng dẫn cài đặt máy chủ ban đầu của Ubuntu 18.04, bao gồm người dùng sudo không phải root và một firewall.
● Nginx đã được cài đặt trên máy chủ của bạn – bạn có thể thực hiện theo bài “Cách Cài Đặt Nginx Trên Ubuntu 18.04“.
● Một tên miền đã được cấu hình trỏ về máy chủ của bạn. Bạn có thể mua tên miền trên Namecheap hoặc lấy miễn phí trên Freenom.
● Một chứng chỉ TLS/SSL đã được cấu hình cho máy chủ của bạn. Bạn có ba lựa chọn:
– Bạn có thể lấy chứng chỉ miễn phí từ theo bài “Cách Bảo Mật Nginx với Let’s Encrypt trên Ubuntu 18.04“.
– Bạn cũng có thể tạo và cấu hình chứng chỉ tự ký theo bài “Cách Tạo Chứng Chỉ SSL Tự Ký cho Nginx trên Ubuntu 18.04“.
– Bạn có thể mua chứng chỉ từ một nhà cung cấp khác và cấu hình Nginx sử dụng theo các bước từ 2 đến 6 của bài “Cách Tạo Chứng Chỉ SSL Tự Ký cho Nginx trên Ubuntu 18.04″
● Nginx đã được cấu hình để chuyển hướng lưu lượng từ cổng 80 sang cổng 443 (điều này nên được thực hiện theo các yêu cầu trên).
● Nginx đã được cấu hình sử dụng khóa Ephemeral Diffie-Hellman (DHE) 2048-bit hoặc cao hơn (điều này cũng được bao gồm trong các yêu cầu trên).
Bước 1 – Kích hoạt hỗ trợ HTTP/2
Nếu bạn đã làm theo bước thiết lập server block trong bài hướng dẫn cài đặt Nginx, bạn sẽ có một server block cho tên miền của bạn tại /etc/nginx/sites-available/your_domain
với chỉ thị server_name
đã được thiết lập đúng. Thay đổi đầu tiên chúng ta sẽ thực hiện là chỉnh sửa server block của tên miền để sử dụng HTTP/2.
Mở file cấu hình cho tên miền của bạn:
sudo nano /etc/nginx/sites-available/your_domain
Trong file, tìm các biến listen
liên quan đến cổng 443:
/etc/nginx/sites-available/<^>your_domain<^> ... listen [::]:443 ssl ipv6only=on; listen 443 ssl; ...
Dòng đầu tiên dành cho kết nối IPv6, dòng thứ hai dành cho tất cả các kết nối IPv4. Chúng ta sẽ bật HTTP/2 cho cả hai.
Chỉnh sửa từng chỉ thị listen
để thêm tham số http2
:
/etc/nginx/sites-available/<^>your_domain<^> ... listen [::]:443 ssl http2 ipv6only=on; listen 443 ssl http2; ...
Dòng lệnh này báo cho Nginx sử dụng HTTP/2 với các trình duyệt hỗ trợ.
Lưu file cấu hình và thoát khỏi trình soạn thảo.
Mỗi khi bạn thay đổi các file cấu hình của Nginx, hãy kiểm tra cú pháp:
sudo nginx -t
Nếu cú pháp không có lỗi, bạn sẽ thấy kết quả như sau:
Output of sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Tiếp theo, chúng ta sẽ cấu hình máy chủ sử dụng danh sách các cipher chặt chẽ hơn.
Bước 2 – Loại bỏ các Cipher Suite cũ và không an toàn
HTTP/2 có danh sách đen (blacklist) các cipher cũ và không an toàn, vì vậy chúng ta phải tránh sử dụng chúng. Cipher suites là các thuật toán mật mã mô tả cách dữ liệu được truyền tải nên được mã hoá.
Phương pháp định nghĩa các cipher phụ thuộc vào cách bạn đã cấu hình chứng chỉ TLS/SSL cho Nginx.
Nếu bạn sử dụng Certbot để lấy chứng chỉ, Certbot cũng đã tạo file/etc/letsencrypt/options-ssl-nginx.conf
chứa các cipher không đủ mạnh cho HTTP/2. Vì sửa đổi file này sẽ ngăn Certbot cập nhật trong tương lai, chúng ta sẽ báo cho Nginx không sử dụng file này và tự chỉ định danh sách cipher.
Mở file cấu hình server block của tên miền:
sudo nano /etc/nginx/sites-available/your_domain
Tìm dòng chứa file options-ssl-nginx.conf
và comment nó lại:
/etc/nginx/sites-available/<^>your_domain<^> # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot<^>
Dưới dòng đó, thêm dòng sau để định nghĩa các cipher được phép sử dụng:
/etc/nginx/sites-available/<^>your_domain<^> ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD
Lưu file và thoát trình soạn thảo.
Nếu bạn sử dụng chứng chỉ tự ký hoặc chứng chỉ từ bên thứ ba và đã cấu hình theo yêu cầu, mở file /etc/nginx/snippets/ssl-params.conf
:
sudo nano /etc/nginx/snippets/ssl-params.conf
Tìm dòng sau trong file:
/etc/nginx/snippets/ssl-params.conf ... ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ...
Chỉnh sửa dòng đó thành:
/etc/nginx/snippets/ssl-params.conf ... ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!
Lưu file và thoát trình soạn thảo.
Một lần nữa, kiểm tra cú pháp:
sudo nginx -t
Nếu có lỗi, hãy sửa chúng và kiểm tra lại. Khi không còn lỗi cú pháp, khởi động lại Nginx:
sudo systemctl reload nginx
Sau khi máy chủ khởi động lại, hãy kiểm tra để đảm bảo rằng nó hoạt động đúng.
Bước 3 – Xác minh HTTP/2 đã được bật
Hãy đảm bảo rằng máy chủ đang chạy và hỗ trợ HTTP/2.
Sử dụng lệnh curl
để gửi yêu cầu tới trang web của bạn và xem các header:
curl -I -L https://your_domain
Bạn sẽ thấy kết quả như sau:
Output HTTP/1.1 301 Moved Permanently Server: nginx/1.14.0 (Ubuntu) Date: Fri, 06 Jul 2018 19:07:12 GMT Content-Type: text/html Content-Length: 194 Connection: keep-alive Location: https://your_domain/ HTTP/2 200 server: nginx/1.14.0 (Ubuntu) date: Fri, 06 Jul 2018 19:07:12 GMT content-type: text/html content-length: 16 last-modified: Fri, 06 Jul 2018 16:55:37 GMT etag: "5b3f9f09-10" accept-ranges: bytes
Ngoài ra, bạn có thể kiểm tra HTTP/2 bằng Google Chrome. Mở Chrome và truy cập vào http://your_domain
. Mở Developer Tools (View -> Developer -> Developer Tools) và làm mới trang (View -> Reload This Page). Chuyển sang tab Network, nhấp chuột phải vào dòng tiêu đề của bảng bắt đầu với “Name”, sau đó chọn tùy chọn “Protocol” từ menu popup.
Bạn sẽ thấy “h2
” (viết tắt của HTTP/2) xuất hiện trong cột Protocol, cho biết HTTP/2 đã hoạt động.
Bước 4 – Bật HTTP Strict Transport Security (HSTS)
Mặc dù các yêu cầu HTTP của bạn đã được chuyển hướng tới HTTPS, nhưng bạn có thể kích hoạt HSTS để tránh việc phải chuyển hướng liên tục. Nếu trình duyệt nhận được header HSTS, nó sẽ không cố kết nối với máy chủ qua HTTP thông thường trong một khoảng thời gian nhất định. Dù sao, nó sẽ chỉ trao đổi dữ liệu qua kết nối HTTPS được mã hoá. Header này cũng giúp bảo vệ bạn khỏi các cuộc tấn công hạ cấp giao thức.
Mở file cấu hình Nginx:
sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào file để kích hoạt HSTS:
/etc/nginx/nginx.conf http { ... ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; add_header Strict-Transport-Security "max-age=15768000" always; } ...
Mặc định, header này không được thêm vào các yêu cầu từ subdomain. Nếu bạn có subdomain và muốn HSTS áp dụng cho tất cả, hãy thêm biến includeSubDomains
vào cuối dòng, như sau:
/etc/nginx/nginx.conf add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Lưu file và thoát trình soạn thảo.
Kiểm tra cú pháp lại:
sudo nginx -t
Cuối cùng, khởi động lại Nginx để áp dụng thay đổi:
sudo systemctl reload nginx
Kết luận
Giờ đây, máy chủ Nginx của bạn đã hỗ trợ HTTP/2, giúp cải thiện hiệu suất và tối ưu tốc độ tải trang. Để đảm bảo hệ thống của bạn đạt chuẩn bảo mật cao nhất, bạn có thể kiểm tra cấu hình SSL bằng cách sử dụng Qualys SSL Labs. Công cụ này sẽ đánh giá độ mạnh của chứng chỉ SSL/TLS và cung cấp điểm số tổng quan về mức độ an toàn của máy chủ.
Nếu bạn đã thiết lập đúng cách, máy chủ của bạn có thể đạt điểm A+, chứng minh rằng kết nối được mã hóa an toàn và tuân theo các tiêu chuẩn bảo mật mới nhất. Hãy tiếp tục theo dõi các bản cập nhật của Nginx và HTTP/2 để đảm bảo máy chủ của bạn luôn được tối ưu và bảo mật tốt nhất.
Sau khi cấu hình Nginx hỗ trợ HTTP/2, bạn cần một server ổn định để chạy website? Thuê VPS tại DataOnline là giải pháp lý tưởng, giúp bạn dễ dàng triển khai và quản lý ứng dụng với chi phí tối ưu, hỗ trợ kỹ thuật 24/7!