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.