Skip to content

Web Server cho Linux nhúng

Trên thiết bị nhúng, web server thường dùng để cung cấp giao diện cấu hình (web UI), REST API cho hệ thống quản lý, hoặc phục vụ firmware update qua HTTP. Trang này so sánh các lựa chọn phổ biến; chi tiết từng gói nằm ở các trang con.

Hai mô hình sử dụng

  • Web server độc lập (standalone): một daemon riêng (lighttpd, Nginx, BusyBox httpd) phục vụ file tĩnh và chuyển request động sang backend qua CGI, FastCGI hoặc reverse proxy.
  • Web server nhúng vào ứng dụng (embedded library): thư viện C (Mongoose, CivetWeb) được link thẳng vào ứng dụng, handler HTTP là các hàm C, truy cập trực tiếp dữ liệu của ứng dụng mà không cần IPC.

Bảng so sánh

Gói Mô hình License Footprint Động (dynamic content) TLS Ghi chú
BusyBox httpd Standalone GPL-2.0 Rất nhỏ (applet của BusyBox) CGI Không (cần proxy bên ngoài) Đủ cho trang cấu hình đơn giản
lighttpd Standalone BSD-3-Clause Nhỏ CGI, FastCGI, SCGI, proxy Có (OpenSSL, mbedTLS, wolfSSL, ...) Lựa chọn phổ biến cho thiết bị nhúng
Nginx Standalone BSD-2-Clause Trung bình FastCGI, uWSGI, reverse proxy Có (OpenSSL) Mạnh khi cần reverse proxy, nhiều kết nối
Mongoose Thư viện GPL-2.0 / thương mại Rất nhỏ (1 file .c) Handler C, WebSocket, MQTT Có (built-in TLS, mbedTLS, OpenSSL) Sản phẩm đóng cần license thương mại
CivetWeb Thư viện MIT Nhỏ Handler C, CGI, Lua, WebSocket Có (OpenSSL) Fork của Mongoose trước khi đổi license

Note

Footprint phụ thuộc nhiều vào module được bật và thư viện TLS đi kèm. Nên đo trên chính image của mình (size, ls -l binary, /proc/<pid>/status lúc chạy) và ghi lại vào trang từng gói.

Gợi ý chọn

  • Chỉ cần vài trang cấu hình, rootfs rất nhỏ: BusyBox httpd + CGI shell script.
  • Web UI + backend riêng (FastCGI, Python, Lua), cần HTTPS: lighttpd.
  • Cần reverse proxy cho nhiều service, nhiều kết nối đồng thời, thiết bị đủ tài nguyên: Nginx.
  • Muốn REST API / WebSocket nằm ngay trong ứng dụng C: CivetWeb (MIT) hoặc Mongoose (chú ý license).

Bảo mật

Thiết lập HTTPS và quản lý chứng chỉ xem tại TLS. Một số nguyên tắc chung:

  • Chạy daemon dưới user không phải root, chỉ bind port cần thiết.
  • Tắt directory listing và các module không dùng.
  • Theo dõi CVE của gói và thư viện TLS đi kèm.

Các trang chi tiết