Giới thiệu HTTP Keepalive connections
- Mục đích của bài viết này là muốn gửi đến các bạn một cách nhìn rỏ ràng nhất về tầm ảnh hưởng của HTTP Keepalive Connections đối với Performance của website.
- Bài này mình sẽ giới thiệu tổng quát, chi tiết, sau đó mình sẽ viết bài hướng dẫn cấu hình Timeout và Keepalive cho dịch vụ Apache web service.
- Mình sẽ giải thích cho các bạn cách hoạt động của giao thức HTTP và cách sử lý một HTTP transactions của các HTTP Server. Những performance problems thường xảy ra nhất.
I – Giới thiệu về HTTP Protocol và Keepalive connections.
- HTTP Keepalive là một chức năng thuộc về performance của website rất quan trọng, nó làm giảm đi độ trễ của Page Load và giúp cho Website load nhanh hơn.
- HTTP rất đơn giản nó là một Text-based Protocol. Hình bên dưới là Output của quá trình Request và Response HTTP.
- HTTP Client khởi tạo một TCP Connection đến HTTP Server [ Quá trình bắt tay 3 bước của TCP Protocol ]. Sau đó nó sẽ gửi Request tới Server và nhận về Response. Cuối cùng là Server đóng kết nối TCP lại. giải phóng Resource.
- Phương thức hoạt động ở trên không hiệu quả đối với những site lớn có nhìu thành phần như js, css, image,… và được truy cập qua một đường truyền chậm. Cứ mỗi lần kết nối là phải tạo TCP Connection, muốn ngắt kết nối thì cả hai bên cùng ngắt và cứ mỗi request, message thì phải khởi tạo 1 lần như vậy. Do vậy nên nó sẽ làm giảm performance của Website
- Để giải quyết vấn đề trên thì giao thức HTTP sử dụng một process gọi là “Keepalive” Connections để giữ TCP connection giữa Client và Server cho đến khi hoàn tất HTTP transaction. Nếu Client muốn tiếp tục một HTTP transaction khác nữa thì nó sử dụng tiếp process keepalive connection mà không cần khởi tạo lại TCP Connection.
- Client chỉ cần tạo một vài TCP Connections đến Server và sử dụng keepalive connections để transfer qua. Những TCP Connections này chỉ thật sự đóng kết nối khi Client hoặc Server không cần nữa. ( Vấn đề này phụ thuộc vào cấu hình của webservice, Hôm sau mình sẽ viết bài cấu hình và sẽ hướng dẫn rỏ hơn. Nó có những quy định về Timeout cho những connections này. )
II – Những ảnh hưởng của vấn đề nêu trên với HTTP Server.
- Nếu có một số lượng lớn Client sử dụng HTTP Keepalive và Webserver có giới hạn concurrent limit connections ( giới hạn connect đồng thời ). thì lúc đó Performance của website bị giảm xuống nhanh chóng khi giới hạn này được chạm tới.
- Đây củng là một nhược điểm giúp cho attacker có thể tấng công VPS, Server của mình dựa vào đặt điểm của KeepAlive là hold connection. Keep-Dead và Slow Loris là 2 dạng tấn công nhằm vào tính chất này. Để phòng tránh thì các bạn có thể off chức năng này hoặc là cấu hình Timeout ngắn hơn.
hx, ko bật thì chậm, mà bật thì dễ die thì cũng khó anh nhỉ. làm sao để lợi đôi đường đây.
Hi anh,
Theo mình nghỉ thì bạn nên bật lên, để nâng performance của Site mình. Bị tấn công thì củng tùy vào mức độ với tùy vào Site của mình nữa. Mình có viết bài hướng dẫn cấu hình https://wikivps.net/toi-uu-vestacp-cau-hinh-toi-uu-apache-tren-vestacp-phan-10/ . Bạn xem thêm và làm theo nhé.
Thân,
Goo Nux