Máy chủ web Apache là một giải pháp phổ biến để phục vụ các website trên Internet. Tính đến năm 2019, ước tính Apache phục vụ 29% tổng số website đang hoạt động, đồng thời mang lại sự bền bỉ và tính linh hoạt cho các nhà phát triển. Sử dụng Apache, quản trị viên có thể cấu hình một máy chủ để lưu trữ nhiều tên miền hoặc website trên cùng một giao diện hoặc địa chỉ IP thông qua một hệ thống khớp tên (matching system).
Mỗi tên miền hoặc website riêng lẻ – được gọi là “virtual host” – được cấu hình qua Apache sẽ chỉ dẫn khách truy cập đến một thư mục cụ thể chứa thông tin của website đó. Quy trình này được thực hiện mà không tiết lộ rằng cùng một máy chủ cũng đang phục vụ nhiều website khác. Phương pháp này có thể mở rộng vô hạn (không bị giới hạn phần mềm) miễn là máy chủ của bạn có thể xử lý tải. Đơn vị cơ bản mô tả một website hay tên miền là virtual host.
Trước khi bắt đầu cấu hình Virtual Hosts, việc lựa chọn một VPS server ổn định và hiệu suất cao là yếu tố then chốt để đảm bảo website hoạt động mượt mà. Nếu bạn đang tìm kiếm giải pháp VPS phù hợp, hãy khám phá các tùy chọn tại DataOnline.
Sau đây, DataOnline sẽ hướng dẫn bạn cài đặt các virtual hosts cho Apache trên máy chủ Ubuntu 18.04. Trong quá trình thực hiện, bạn sẽ học cách phục vụ nội dung khác nhau cho khách truy cập tùy theo tên miền họ yêu cầu.
Yêu cầu
Trước khi bắt đầu, bạn cần:
- Tạo một tài khoản người dùng không phải root.
- Cài đặt Apache trên máy chủ của bạn. Nếu chưa cài đặt, hãy cài đặt Apache qua apt theo các lệnh sau:
sudo apt update sudo apt install apache2
Nếu bạn cần hướng dẫn chi tiết cũng như cách cấu hình tường lửa, hãy tham khảo bài hướng dẫn “Cách cài đặt máy chủ web Apache trên Ubuntu 18.04” của DataOnline.
Trong hướng dẫn này, chúng ta sẽ cấu hình virtual host cho hai tên miền ví dụ: example.com và test.com. Trong quá trình làm theo, bạn nên thay thế bằng tên miền hoặc giá trị của riêng bạn.
Nếu bạn đang sử dụng DataOnline, bạn có thể tham khảo tài liệu “Cách thêm tên miền” để biết cách thiết lập tên miền. Với các nhà cung cấp khác, hãy tham khảo tài liệu hướng dẫn tương ứng. Nếu bạn chưa có tên miền thật, bạn có thể sử dụng các giá trị thử nghiệm. Chúng ta sẽ hướng dẫn cách chỉnh sửa file hosts cục bộ để kiểm tra cấu hình, cho phép xác nhận cấu hình từ máy tính cá nhân dù nội dung không khả dụng qua tên miền đối với khách truy cập khác.
Bước 1 – Tạo cấu trúc thư mục
Bước đầu tiên là tạo một cấu trúc thư mục chứa dữ liệu website sẽ được phục vụ cho khách truy cập.
Document root (thư mục gốc mà Apache dùng để tìm nội dung phục vụ) sẽ được đặt trong các thư mục riêng biệt dưới đường dẫn /var/www. Chúng ta sẽ tạo một thư mục cho từng virtual host.
Bên trong mỗi thư mục đó, tạo một thư mục public_html để chứa các file thực tế. Cách sắp xếp này mang lại sự linh hoạt cho việc lưu trữ nội dung.
Ví dụ, với các website của chúng ta, hãy tạo các thư mục như sau (nếu bạn sử dụng tên miền thật hoặc giá trị khác, hãy thay thế phần được đánh dấu):
sudo mkdir -p /var/www/example.com/public_html sudo mkdir -p /var/www/test.com/public_html
Lưu ý: Phần tên miền (ví dụ: example.com, test.com) là những giá trị bạn muốn phục vụ từ VPS của mình.
Bước 2 – Cấp quyền
Hiện tại, cấu trúc thư mục được tạo ra có quyền sở hữu thuộc về người dùng root. Nếu bạn muốn người dùng thường có thể chỉnh sửa file trong các thư mục web, hãy thay đổi quyền sở hữu bằng lệnh:
sudo chown -R $USER:$USER /var/www/example.com/public_html sudo chown -R $USER:$USER /var/www/test.com/public_html
Biến $USER sẽ lấy giá trị tên người dùng bạn đang đăng nhập khi nhấn ENTER. Sau lệnh này, người dùng thường của bạn sẽ sở hữu các thư mục public_html chứa nội dung.
Tiếp theo, hãy chỉnh sửa quyền để đảm bảo rằng thư mục web và toàn bộ file, thư mục con bên trong đều có quyền đọc, cho phép Apache phục vụ trang đúng cách:
sudo chmod -R 755 /var/www
Bây giờ, máy chủ web của bạn có đủ quyền để phục vụ nội dung và người dùng của bạn có thể tạo nội dung trong các thư mục cần thiết.
Bước 3 – Tạo trang demo cho mỗi virtual host
Với cấu trúc thư mục đã sẵn sàng, hãy tạo nội dung để phục vụ. Cho mục đích minh họa, chúng ta sẽ tạo trang index.html cho mỗi website.
Bắt đầu với example.com. Mở file index.html trong trình soạn thảo văn bản, ví dụ dùng nano:
nano /var/www/example.com/public_html/index.html
Trong file này, hãy tạo một tài liệu HTML báo hiệu website đang kết nối đến tên miền đó, ví dụ:
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>
Lưu và đóng file (trong nano, nhấn CTRL+X, sau đó nhấn Y rồi ENTER).
Sau đó, sao chép file này làm cơ sở cho website thứ hai:
cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html
Mở file index.html cho test.com và chỉnh sửa thông tin cho phù hợp:
nano /var/www/test.com/public_html/index.html
Nội dung file sẽ như sau:
<html> <head> <title>Welcome to Test.com!</title> </head> <body> <h1>Success! The test.com virtual host is working!</h1> </body> </html>
Lưu và đóng file. Giờ đây, bạn đã có các trang cần thiết để kiểm tra cấu hình virtual host.
Bước 4 – Tạo file cấu hình virtual host mới
Các tệp virtual host là các tệp xác định cấu hình thực tế của các virtual host và quy định cách máy chủ web Apache phản hồi các yêu cầu từ các tên miền khác nhau.
Apache đi kèm với một tệp virtual host mặc định có tên 000-default.conf
, mà chúng ta có thể sử dụng làm điểm khởi đầu. Chúng ta sẽ sao chép tệp này để tạo một tệp virtual host riêng cho từng tên miền.
Chúng ta sẽ bắt đầu với một tên miền, cấu hình nó, sau đó sao chép tệp để sử dụng cho tên miền thứ hai và thực hiện một số điều chỉnh cần thiết. Trong cấu hình mặc định của Ubuntu, mỗi tệp virtual host phải có phần mở rộng **.conf**.
Tạo file virtual host đầu tiên
Sao chép file cấu hình mặc định cho tên miền đầu tiên:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Mở file mới với quyền root:
sudo nano /etc/apache2/sites-available/example.com.conf
Sau khi loại bỏ các comment, file sẽ có nội dung cơ bản như sau:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Trong file này, chúng ta sẽ tùy chỉnh các thông số cho tên miền example.com và thêm một số chỉ thị bổ sung. Phần cấu hình này áp dụng cho tất cả các yêu cầu trên cổng 80 (cổng HTTP mặc định).
Đầu tiên, thay đổi chỉ thị ServerAdmin thành email của quản trị viên, ví dụ:
ServerAdmin admin@example.com
Sau đó, chúng ta cần thêm hai chỉ thị (directive).
Chỉ thị đầu tiên, ServerName
, xác định tên miền cơ bản mà virtual host này sẽ phản hồi. Đây thường sẽ là tên miền chính của bạn.
Chỉ thị thứ hai, ServerAlias
, định nghĩa các tên miền bổ sung sẽ được coi như tên miền cơ bản. Điều này hữu ích để khớp với các tên miền phụ mà bạn đã thiết lập, chẳng hạn như www
.
ServerName example.com ServerAlias www.example.com
Cuối cùng, thay đổi chỉ thị DocumentRoot cho phù hợp với thư mục đã tạo:
DocumentRoot /var/www/example.com/public_html
Kết quả, file example.com.conf sẽ trông như sau:
<VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Lưu và đóng file.
Sao chép virtual host đầu tiên và điều chỉnh cho tên miền thứ hai
Tiếp theo, tạo file virtual host cho test.com bằng cách sao chép file đã tạo:
sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf
Mở file mới:
sudo nano /etc/apache2/sites-available/test.com.conf
Chỉnh sửa các thông số cho test.com sao cho phù hợp. Sau khi chỉnh sửa, file sẽ có nội dung như sau:
<VirtualHost *:80> ServerAdmin admin@test.com ServerName test.com ServerAlias www.test.com DocumentRoot /var/www/test.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Lưu và đóng file.
Bước 5 – Kích hoạt các file virtual host mới
Sau khi tạo file cấu hình cho các virtual host, bạn cần kích hoạt chúng. Apache cung cấp các công cụ để thực hiện việc này.
Sử dụng lệnh a2ensite để kích hoạt từng trang:
sudo a2ensite example.com.conf sudo a2ensite test.com.conf
Sau đó, vô hiệu hóa trang mặc định (file 000-default.conf):
sudo a2dissite 000-default.conf
Khi hoàn tất, hãy khởi động lại Apache để áp dụng các thay đổi và kiểm tra trạng thái:
sudo systemctl restart apache2 sudo systemctl status apache2
Bây giờ, máy chủ của bạn đã được cấu hình để phục vụ hai website.
Bước 6 – Cấu hình file hosts cục bộ (Tùy chọn)
Nếu bạn chưa sử dụng tên miền thật mà dùng các tên miền ví dụ để thử nghiệm, bạn có thể kiểm tra chức năng của cấu hình bằng cách chỉnh sửa file hosts trên máy tính cục bộ. Việc này sẽ chặn các yêu cầu đến các tên miền bạn cấu hình và chuyển hướng chúng về máy chủ VPS của bạn, tương tự như hệ thống DNS sẽ làm nếu bạn có tên miền đã đăng ký.
Lưu ý rằng thao tác này chỉ có hiệu lực trên máy tính cục bộ của bạn, và chỉ dùng để thử nghiệm.
Trên máy tính chạy Mac hoặc Linux, mở file hosts với quyền quản trị:
sudo nano /etc/hosts
Nếu bạn đang sử dụng Windows, hãy tham khảo hướng dẫn chỉnh sửa file hosts tương ứng.
Thêm các dòng sau vào file hosts, thay thế your_server_IP bằng địa chỉ IP công cộng của máy chủ:
127.0.0.1 localhost 127.0.1.1 guest-desktop your_server_IP example.com your_server_IP test.com
Lưu và đóng file. Việc này sẽ chuyển hướng các yêu cầu đến example.com và test.com trên máy tính của bạn tới máy chủ VPS, giúp bạn kiểm tra cấu hình virtual host.
Bước 7 – Kiểm tra kết quả
Bây giờ khi bạn đã cấu hình xong các virtual host, bạn có thể kiểm tra thiết lập của mình bằng cách truy cập vào các tên miền mà bạn đã cấu hình trong trình duyệt web:
http://example.com
Bạn sẽ thấy một trang hiển thị như sau:
Bạn cũng có thể truy cập vào trang thứ hai và xem tệp mà bạn đã tạo cho trang thứ hai của mình.
http://test.com
Nếu cả hai trang này hoạt động như mong đợi, bạn đã cấu hình thành công hai virtual host trên cùng một máy chủ.
Nếu bạn đã điều chỉnh tệp hosts trên máy tính cá nhân, bạn có thể muốn xóa các dòng bạn đã thêm sau khi xác minh rằng cấu hình của bạn hoạt động. Điều này sẽ ngăn cho tệp hosts của bạn bị lấp đầy với các mục không còn cần thiết nữa.
Nếu bạn cần truy cập lâu dài, hãy cân nhắc thêm tên miền cho mỗi trang bạn cần và thiết lập chúng để trỏ về máy chủ của bạn.
Kết luận
Nếu bạn đã làm theo hướng dẫn, máy chủ của bạn hiện đã có khả năng phục vụ hai tên miền riêng biệt. Quy trình này hoàn toàn mở rộng, cho phép bạn dễ dàng thêm nhiều virtual hosts khác theo nhu cầu sử dụng. Apache không giới hạn số lượng tên miền có thể xử lý, do đó bạn có thể cấu hình bao nhiêu virtual hosts tùy theo tài nguyên và khả năng của máy chủ.
Khi triển khai nhiều website trên một máy chủ, việc tối ưu chi phí là điều quan trọng. Tham khảo giá thuê VPS cạnh tranh và các gói dịch vụ linh hoạt tại DataOnline để lựa chọn giải pháp phù hợp với nhu cầu của bạn.