Hướng dẫn xây dựng cơ chế Static Media kết hợp với Reverse Proxy cùng Openlitespeed

Giả sử ta muốn lưu trữ Static đối với các File nặng để nó xử lý trực tiếp với Openlitespeed thay vì phải xử lý qua đầu Webserver, ta sẽ tiến hành tạo ở Virtual Host 1 Context riêng dẫn tới đường dẫn Media đó, ở đây mặc định là /media/ nhé

Cách xử lý Context

Vào Openlitespeed - Virtual Host - Context - Tạo Context mới (Static)

Giả sử là như vậy, ta có thể để các tham số sau

  • URI: Đường dẫn tới Media đó, ví dụ domain.com/media/file.mp4 chẳng hạn
  • Location: Đường dẫn tới file trong thư mục máy tính của bạn
  • Accessible: Yes
  • Header cache: Tùy vào loại File, như của mình là HLS thì là Cache-Control: public, max-age=31536000, immutable
  • Access Allowed: * (để ai cũng có thể xem được, cũng có thể giới hạn tùy bạn)

Đặt context này ở cấp cao hơn so với App của bạn (Reverse Proxy), tiếp đó ta tới bước tiếp theo

Thiết  lập MimeType bổ sung cho cơ chế HLS

HLS thì nó dùng dạng đuôi như sau, ta cần bổ sung vào cơ chế của Openlitespeed nhé

Đuôi File Mô tả
m3u8 application/vnd.apple.mpegurl
ts video/mp2t

Ấn vào MIME Settings kia là ta sẽ có giao diện đồ họa để thực hiện tinh chỉnh loại File

Xác lập quyền

chmod o+x /thư mục demo
chmod -R 755 /thư mục demo/media

OpenLiteSpeed chạy dưới user lsphp hoặc nobody (tùy cấu hình). Nếu user này không có quyền "vào" các thư mục cha, nó sẽ trả về lỗi 403. hãy thử Curl đường dẫn Media để xác định rõ là được 

HTTP/2 200

etag: "754-694aa8c4-101085;;;"

last-modified: Tue, 23 Dec 2025 14:35:48 GMT

content-type: application/vnd.apple.mpegurl

content-length: 1876

accept-ranges: bytes

date: Tue, 23 Dec 2025 16:51:24 GMT

server: LiteSpeed

cache-control: public, max-age=31536000, immutable

alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"

Đây là một đoạn thông tin khi  ta Curl Video HLS thẳng từ máy chủ, nó sẽ ưu tiên hơn cơ chế Proxy

Ứng dụng chạy Docker có cần phải Mount Media nữa không?

Câu trả lời là không, vì lúc này ứng dụng đã sử dụng Media Static và đặt ở ưu tiên cao hơn rồi, nên vai trò của ứng dụng Web chỉ là tạo kết nối Database với dữ liệu đó thay vì phải lưu. Cơ chế này sẽ khiến Media được Serve riêng nên có hiệu năng tốt hơn rất nhiều  so với việc được Serve qua Backend (đi lòng vòng, đặc biệt là qua Docker như các ứng dụng Nam hay làm)