Listener và virtual host trong OpenLiteSpeed

Thời gian qua, mình đã dành nhiều thời gian thử nghiệm phần mềm OpenLiteSpeed trên server. Có một số thiết lập dễ dàng ăn ngay, cũng có một số thiết lập cần thêm các bước cài đặt bổ sung từ giao diện dòng lệnh. Mình cũng đã thông báo một vài lỗi cho LiteSpeed Technologies (công ty đứng đằng sau OpenLiteSpeed) thông qua trang GitHub họ tạo ra cho OpenLiteSpeed. Đến hôm nay, khi có một lỗi liên quan đến cache được họ xác nhận và sửa chữa thì mình quyết định dừng thử nghiệm, và quay lại tiếp tục viết hướng dẫn cài đặt và thiết lập OpenLiteSpeed.

Bài này giả sử rằng các bạn đã thực hiện cài đặt OpenLiteSpeed bản mới nhất trên máy ảo chạy hệ điều hành Ubuntu như mình đã viết ở bài trước. Nếu các bạn đã thực hiện cài đặt theo bài đó thì các bạn sẽ thực hiện thiết lập theo bài này thuận lợi hơn nhiều. Nếu không thì các bạn hãy tự điều chỉnh một cách tương ứng với môi trường máy ảo mà các bạn đang sử dụng.

Bài này hướng dẫn tạo và thiết lập virtual host trên OpenLiteSpeed. Có điều, tại sao tiêu đề bài viết này lại có cả listener (cổng nghe)? Lí do là…

Thiết lập virtual host trên Apache và NGINX có kèm theo việc chỉ định luôn cổng cho virtual host để nghe từ bên ngoài, còn OpenLiteSpeed thì tách riêng thiết lập cổng. Việc này tiện cho việc sử dụng một cổng cho nhiều virtual host và ngược lại. Thiết lập cổng nghe (listener) trên OpenLiteSpeed còn có tuỳ chọn riêng hạn chế truy cập. Hãy ấn nút đọc tiếp bài này để hiểu kĩ hơn nhé.

Bài này gồm hai phần:

  1. Thiết lập virtual host
  2. Thiết lập listener

Trước khi đi vào nội dung chính, các bạn nhớ cho mình mấy nút nho nhỏ sau có trên giao diện trang admin (trang thiết lập) của OpenLiteSpeed.

Các nút thường gặp trong trang thiết lập của OpenLiteSpeed

  • Nút Sign out: Đăng xuất ra khỏi trang thiết lập.
  • Nút Graceful restart: Khởi động lại OpenLiteSpeed. Nút này phải được ấn sau mỗi lần thiết lập xong OpenLiteSpeed.
  • Nút Edit của một bảng, nằm tại cuối tiêu đề bảng đó: Sửa thiết lập tại bảng tương ứng.
  • Nút Add của một bảng liệt kê, nằm ở cuối tiêu đề bảng đó: Thêm/bổ sung.
  • Nút Edit ở cuối mỗi hàng trong một bảng liệt kê: Sửa các giá trị cụ thể tại hàng đó.
  • Nút Delete ở cuối mỗi hàng trong một bảng liệt kê: Xoá hàng.

Giờ mình vào nội dung chính của bài đây.

1. Thiết lập virtual host

1.1. Chuẩn bị

1.1.1. Xác định một số giá trị quan trọng

Khi lập một virtual host trên OpenLiteSpeed để phục vụ một website, bạn cần xác định trước các giá trị quan trọng nhất sau:

  • Virtual Host Name: Tên của virtual host, được sử dụng cho biến $VH_NAME.
  • Virtual Host Root: Đường dẫn tuyệt đối dẫn đến thư mục gốc của virtual host. Đường dẫn này được sử dụng cho biến $VH_ROOT. Thư mục gốc này sẽ được dùng để chứa thiết lập riêng và log của virtual host hiện thời. Thư mục đó khác với thư mục gốc của trang web.
  • Document Root: Đây mới chính là thư mục gốc của website tương ứng, được xác định bằng đường dẫn tuyệt đối. Tương ứng là biến $DOC_ROOT.
  • Domain Name: Một và chỉ một domain (hoặc subdomain) chính được sử dụng cho virtual host. Nếu domain sử dụng tại đây có đoạn www. ở đầu thì cần viết cả đoạn đó vào. Nếu sử dụng subdomain thì cần viết đầy đủ, ví dụ như sub.vidu.com chẳng hạn.
  • Domain Aliases: Các domain (hoặc subdomain) khác dành cho virtual host. Bạn có thể ghi nhiều domain tại dòng này, trong đó sử dụng dấu phẩy (,) giữa các domain.
  • Các dòng File Name thuộc hai bảng Virtual Host Log và Access Log: Chỉ đường dẫn tuyệt đối dẫn đến file log ghi nhận lỗi của virtual host (virtual host log) và file log ghi nhận truy cập (access log).

Có một điều thú vị: Các đường dẫn tại Virtual Host Root, Document Root và các dòng File Name như trên, đều có thể được viết gọn lại nhờ sử dụng các biến đặc biệt.

Ví dụ, nếu không có điều chỉnh gì đặc biệt thì có một biến đặc biệt là $SERVER_ROOT chứa đường dẫn tuyệt đối của thư mục đã cài OpenLiteSpeed:

/usr/local/lsws

Nếu bạn sử dụng thư mục có đường dẫn tuyệt đối như sau làm thư mục gốc cho virtual host:

/usr/local/lsws/vh-noisystream/

Thì bạn có thể sử dụng biến đặc biệt trên để viết gọn lại đường dẫn trong trang thiết lập của OpenLiteSpeed:

$SERVER_ROOT/vh-noisystream/

Mà nếu bạn đặt tên cho virtual host là vh-noisystream thì bạn có thể biến đổi linh hoạt thêm nữa:

$SERVER_ROOT/$VH_NAME/

1.1.2. Một ví dụ đặt thư mục tốt, dễ quản lý

Từ đây trở về sau mình sẽ liên hệ với ví dụ này, các bạn có thể tham khảo và điều chỉnh lại phù hợp với nhu cầu riêng.

  • Virtual Host Root ($VH_ROOT)
    $SERVER_ROOT/$VH_NAME/
  • Document Root ($DOC_ROOT)
    /var/www/$VH_NAME

    Việc tách document root này ra khỏi thư mục cài đặt OpenLiteSpeed sẽ tiện cho việc sao lưu thủ công trang web.

  • Virtual Host Log – File Name
    $VH_ROOT/logs/error.log
  • Access Log – File Name
    $VH_ROOT/logs/access.log

1.1.3. Tạo sẵn thư mục qua giao diện dòng lệnh

Sở dĩ có việc chuẩn bị này là vì, OpenLiteSpeed không thực hiện tạo sẵn thư mục để lưu lại thiết lập cho từng virtual host cụ thể. Bạn nên tạo sẵn thư mục cho riêng từng virtual host để tiện quản lý về sau.

Bạn cần làm điều này trên giao diện dòng lệnh, vì bạn không chỉ tạo thư mục, mà còn đổi user và group có vai trò quản lý trực tiếp cho các thư mục sẽ tạo nữa. Vì sao? Mặc định OpenLiteSpeed được chạy với user và group lần lượt là nobodynogroup; chúng không thể được sử dụng để đăng nhập vào hệ thống, và cũng không được cấp quyền gì đặc biệt (nếu không phải là kém hơn hẳn một user bình thường). Trong khi đó, sau khi bạn tạo một thư mục mới, thì user và group được đặt cho thư mục đó lần lượt là user mà bạn đã đăng nhập và cái group chứa user đó.

Bạn kết nối đến server qua cổng SSH (22), sau đó tạo thư mục bằng lệnh mkdir, cuối cùng là đổi user và group cho thư mục đã tạo bằng lệnh chown.

Sau đây là trình tự thực hiện các lệnh cụ thể dựa vào ví dụ mình đưa ra ở phần trên. Các bạn thay $VH_NAME bằng tên riêng của virtual host.

cd /usr/local/lsws
mkdir -p $VH_NAME/logs
chown -R nobody:nogroup $VH_NAME
cd /var
mkdir www
cd www
mkdir $VH_NAME
chown -R nobody:nogroup $VH_NAME

Các lệnh trên tạo các thư mục được đưa ra ở ví dụ đã cho, rồi đổi user và group cho các thư mục đó thành nobodynogroup, để OpenLiteSpeed có thể truy cập và đọc ghi được.

1.2. Thiết lập ở trang admin

Nhìn sang cột phía bên trái, bạn ấn vào mục virtual host. Nhìn sang phía bên phải, bạn sẽ thấy một bảng Virtual Host List liệt kê các virtual host đã tạo từ trước.

Trang thiết lập virtual host. Bảng liệt kê virtual host.

Để tạo một virtual host mới, bạn ấn nút Add của bảng đó. Bạn sẽ được chuyển đến bảng Virtual Host dưới đây với rất nhiều tuỳ chọn.

Trang thiết lập virtual host. Bảng tạo virtual host.

Tại bảng trên, trước hết các bạn tự ghi giá trị cho hai dòng Virtual Host NameVirtual Host Root, dựa vào mô tả mình ghi ở phần đầu. Sau đó các bạn chỉnh các dòng sau:

  • Config File: Nơi lưu lại file thiết lập riêng cho virtual host tương ứng. OpenLiteSpeed yêu cầu bắt buộc nó nằm trong thư mục sau:
    $SERVER_ROOT/conf/vhosts/

    Nên các bạn sẽ viết đường dẫn như sau:

    $SERVER_ROOT/conf/vhosts/$VH_NAME.conf
  • Enable Scripts/ExtApps: Nếu các bạn có chạy mã nguồn khác với HTML thì chọn Yes. Nếu không thì chọn No.
  • Restrained: Ngăn chặn truy cập file bên ngoài Virtual Host Root. Nên chọn là Yes, đặc biệt là khi các bạn sử dụng OpenLiteSpeed để chạy nhiều website.

Các dòng còn lại, nếu chưa có tham khảo kĩ ở đâu thì đừng vội chọc ngoáy nhé. Sau đó ấn nút Save.

Lần ấn nút đầu tiên, OpenLiteSpeed sẽ báo lỗi rằng file thiết lập chưa được tạo, kèm theo một link CLICK TO CREATE. Ấn tiếp vào link đó để tạo file rồi ấn lại nút Save lần nữa.

Các bạn được đưa trở về trang liệt kê virtual host lúc đầu. Hãy ấn tiếp vào tên của virtual host mới tạo để thiết lập bổ sung cho nó. Sau đó ấn mở tiếp tab General (chung), giao diện sẽ như thế này.

Trang thiết lập virtual host. Tab General (chung).

Các bạn ấn nút Edit ở bảng General trước, rồi tự chỉnh các dòng Document Root, Domain NameDomain Aliases trong bảng đó (mình đã mô tả và ghi cú pháp ở phần đầu). Ở dòng Administrator Email thì ghi địa chỉ email của người quản lý trang web. Làm một cách tương tự, ở dòng User Server Index Files thuộc bảng Index Files ở dưới, các bạn chọn Yes. (Mô tả chi tiết sẽ có sau.)

Tiếp theo, chuyển sang tab Logs (thiết lập file log). Giao diện giống như sau.

Trang thiết lập virtual host. Tab Logs.

Ở bảng Virtual Host Log, các bạn chỉnh các dòng sau:

  • Use Server’s Log: No (không ghi chung vào log của OpenLiteSpeed mà ghi ra file log riêng của virtual host).
  • File Name (Mình đã mô tả và ghi cú pháp ở phần đầu.)
  • Log Level: NOTICE (để ghi nhận lỗi từ mức đáng chú ý cho đến nghiêm trọng).

Còn đối với bảng Access Log:

  • Log Control: Chọn Own Log File để ghi log truy cập ra file log riêng.
  • File Name (Mình đã mô tả và ghi cú pháp ở phần đầu rồi.)

Đến đây, các bạn đã tạo và thiết lập xong một virtual host mới. Để quay lại trang ban đầu của mục Virtual Host (liệt kê virtual host), các bạn ấn lại mục đó trong cột trái của trang admin.

Có điều, virtual host trong OpenLiteSpeed sẽ “bất động” nếu không được liên kết (gán) vào một listener. Các bạn hãy đọc tiếp để biết cách gán virtual host vào một listener.

Để xoá một virtual host, ấn nút Delete tại cuối hàng ghi virtual host tương ứng trong bảng Virtual Host List. OpenLiteSpeed sẽ hỏi có thật sự muốn xoá không, lúc này ấn tiếp nút Delete để thật sự xoá virtual host đi, còn nếu không chắc chắn thì ấn nút Cancel.

2. Thiết lập listener

OpenLiteSpeed cho phép các bạn tạo, thay đổi listener, và gán virtual host vào listener.

Tại trang thiết lập của OpenLiteSpeed, nhìn sang cột bên trái và chọn mục Listeners. Giao diện sau đó trông tương tự như dưới đây, trong đó có một bảng Listener List liệt kê các listener đã tạo.

Trang thiết lập listener. Phần liệt kê listener đã tạo

Để tạo mới một listener, hãy ấn vào nút Add của bảng đó. Bạn sẽ được chuyển đến bảng Address Settings như hình dưới.

Trang thiết lập listener. Bảng Address Settings tạo listener mới.

Trong bảng này, bạn cần điều chỉnh các dòng sau:

  • Listener Name: Tên của listener.
  • IP Address: Xác định các địa chỉ IP được phép truy cập qua listener để truy cập nội dung. Nếu bạn muốn cho bất cứ ai đều có thể xem trang web nằm tại virtual host gán với listener, thì trong số các giá trị có sẵn được phép chọn lựa, có hai giá trị này đáng quan tâm:
    • ANY: Bất cứ địa chỉ IPv4 nào.
    • [ANY]: Bất cứ địa chỉ IPv4 hay IPv6 nào.
  • Port: Cổng mà listener sử dụng để “nghe” yêu cầu từ phía máy khách truy cập. Bạn chỉ có thể điền một cổng duy nhất nằm trong đoạn từ 0 đến 65535. Có hai cổng hay được sử dụng cho một website là 80 (HTTP thường) và 443 (HTTPS).
  • Secure: Bật SSL cho listener hay không. Nếu sử dụng cho trang web bình thường, hãy chọn No (không) đối với cổng 80, và chọn Yes (có) đối với cổng 443.

Ấn nút Save để listener mới được tạo. Bạn sẽ được đưa trở về bảng Listener List lúc đầu.

Để điều chỉnh thêm, ấn vào tên của listener mới tạo trong bảng đó. Giao diện sau đó sẽ cho bạn xem thiết lập chi tiết của listener.

Trang thiết lập listener. Phần xem lại thiết lập của listener

Tại đây, tab General (chung) đang được mở, với bảng Address Settings như được chỉ ở phần trên, và một bảng Virtual Host Mappings liệt kê các virtual host đang được gán cho listener. Bảng thứ hai cho phép bạn gán các virtual host vào listener.

Để gán một virtual host vào listener, bạn ấn nút Add tại bảng Virtual Host Mappings. Bảng đó sẽ được mở rộng ra như sau.

Trang thiết lập listener của OpenLiteSpeed. Phần gán virtual host vào listener.

Tại đây, bạn chỉnh như sau:

  • Virtual Host: Chọn virtual host cần gán với listener.
  • Domains: Ghi tất cả các domain và subdomain (dạng đầy đủ) sử dụng cho virtual host được chọn. Sử dụng dấu phẩy (,) để phân cách giữa các domain và subdomain.

Ấn nút Save để tiến hành gán virtual host được chọn vào listener. Bạn có thể thực hiện lại các bước như trên để gán thêm một virtual host khác vào cùng listener đó. Kết quả sẽ hiển thị ở bảng Virtual Host Mappings.

Để gỡ một virtual host khỏi listener, các bạn tìm đến hàng của virtual host cần gỡ trong bảng liệt kê Virtual Host Mappings, rồi ấn nút Delete ở cuối dòng.

Đến đây, các bạn đã cơ bản thiết lập xong một listener trên OpenLiteSpeed. Tuy nhiên, để người ngoài có thể kết nối qua listener đó, các bạn cần tiến hành mở cổng tương ứng tại server. Nếu server đó là máy chủ ảo (VPS) EC2 tại Amazon Web Services, mời các bạn đọc bài hướng dẫn này để biết cách mở và đóng cổng.

Để quay trở về trang đầu tiên của mục Listener (liệt kê listener), các bạn ấn lại mục đó tại cột trái của trang admin.

Để xoá một listener, các bạn tìm đến hàng ghi tên của listener cần xoá rồi ấn nút Delete ở cuối hàng.


Như vậy mọi người đã cơ bản biết cách thiết lập virtual host và listener trong OpenLiteSpeed. Từ đây, các bạn có thể đăng tải nội dung lên document root được rồi. Tuy nhiên nếu các bạn cần đến rewrite (viết lại đường dẫn) để sử dụng cho WordPress hay các mã nguồn phức tạp khác, thì các bước trên là chưa đủ. Các bạn có thể tham khảo thêm về rewrite tại bài viết này.

Ngoài ra OpenLiteSpeed còn hỗ trợ SSL, giúp đảm bảo an toàn kết nối giữa máy của khách truy cập và trang web. Thiết lập cho SSL được phân bố ở nhiều nơi trong trang admin, và mình đã viết một bài riêng nữa về các thiết lập này.

Nếu bài viết này hay, các bạn hãy chia sẻ nó để nhiều người đọc tham khảo nhé!