Bạn đang quản lý một máy chủ và muốn chạy nhiều trang web trên cùng một địa chỉ IP? Apache Virtual Hosts chính là giải pháp bạn cần. Về cơ bản, máy chủ ảo (Virtual Hosts) là một tính năng của máy chủ web Apache cho phép bạn host nhiều tên miền hoặc website khác nhau trên một máy chủ duy nhất. Hãy tưởng tượng máy chủ của bạn là một tòa nhà chung cư, và mỗi Virtual Host là một căn hộ riêng biệt, có địa chỉ và không gian sống riêng.
Nếu không sử dụng Virtual Hosts, bạn sẽ gặp rất nhiều khó khăn. Mỗi website sẽ cần một máy chủ hoặc một địa chỉ IP riêng, gây tốn kém chi phí và lãng phí tài nguyên. Việc quản lý cũng trở nên phức tạp khi tất cả các file của nhiều website bị trộn lẫn vào nhau. Sử dụng máy chủ ảo giúp bạn giải quyết triệt để vấn đề này. Bạn có thể dễ dàng phân tách cấu hình, tài nguyên và logs cho từng website, giúp việc quản lý, bảo trì và mở rộng trở nên hiệu quả hơn bao giờ hết. Bài viết này sẽ hướng dẫn bạn chi tiết từng bước cài đặt và cấu hình Apache Virtual Hosts trên hệ điều hành Ubuntu 20.04.

Yêu cầu hệ thống và môi trường chuẩn bị cho Apache Virtual Hosts
Trước khi bắt đầu, việc chuẩn bị một môi trường đúng chuẩn là vô cùng quan trọng để đảm bảo quá trình cài đặt diễn ra suôn sẻ. Giống như việc xây một ngôi nhà cần có nền móng vững chắc, việc thiết lập Virtual Hosts cũng cần các yêu cầu cơ bản về hệ thống và công cụ. Hãy cùng AZWEB kiểm tra xem bạn đã sẵn sàng chưa nhé.
Phiên bản Ubuntu và Apache cần thiết
Để thực hiện theo hướng dẫn này, bạn cần đảm bảo hệ thống của mình đang chạy Ubuntu 20.04 (Focal Fossa). Đây là phiên bản LTS (Long-Term Support) ổn định và được hỗ trợ lâu dài. Bên cạnh đó, bạn cũng cần cài đặt máy chủ web Apache.
Đầu tiên, hãy kiểm tra phiên bản Ubuntu bằng lệnh:lsb_release -a
Tiếp theo, hãy cập nhật hệ thống của bạn để đảm bảo mọi gói phần mềm đều là phiên bản mới nhất:sudo apt update
sudo apt upgrade
Nếu bạn chưa cài đặt Apache, hãy sử dụng lệnh sau:sudo apt install apache2
Sau khi cài đặt xong, bạn có thể kiểm tra trạng thái dịch vụ Apache để chắc chắn rằng nó đang hoạt động:sudo systemctl status apache2
Các công cụ và quyền truy cập
Để thực hiện các thay đổi ở cấp hệ thống như tạo thư mục, chỉnh sửa file cấu hình và khởi động lại dịch vụ, bạn cần có quyền truy cập cao nhất. Cụ thể, bạn cần có quyền root hoặc quyền sử dụng lệnh sudo. Hầu hết các lệnh trong bài hướng dẫn này sẽ bắt đầu bằng sudo.
Ngoài ra, bạn cũng cần một trình soạn thảo văn bản dòng lệnh để tạo và chỉnh sửa các file cấu hình. Hai trình soạn thảo phổ biến và mạnh mẽ nhất trên Ubuntu là nano và vim. Nếu bạn là người mới, nano sẽ dễ sử dụng hơn với các phím tắt được hiển thị ngay trên màn hình. Nếu bạn đã quen thuộc với môi trường dòng lệnh, vim lại cung cấp nhiều tính năng nâng cao mạnh mẽ. Bạn có thể cài đặt chúng nếu chưa có.
Ví dụ, để cài đặt nano:sudo apt install nano
Khi đã có đủ các công cụ và quyền truy cập cần thiết, bạn đã sẵn sàng để chuyển sang các bước cài đặt chi tiết.

Hướng dẫn chi tiết từng bước cài đặt máy chủ ảo Apache trên Ubuntu 20.04
Bây giờ, chúng ta sẽ đi vào phần chính: cài đặt Virtual Host đầu tiên của bạn. Quá trình này bao gồm ba bước chính: tạo cấu trúc thư mục cho website, tạo file cấu hình cho Virtual Host, và cuối cùng là kích hoạt nó. Hãy thực hiện cẩn thận từng bước để đảm bảo mọi thứ hoạt động chính xác.
Tạo thư mục và file website
Mỗi website bạn host trên máy chủ cần có một thư mục riêng để lưu trữ mã nguồn, hình ảnh và các tệp tin khác. Quy ước chung là tạo các thư mục này bên trong /var/www/.
Giả sử bạn muốn tạo một website cho tên miền azweb-example.com. Hãy tạo thư mục cho nó bằng lệnh sau:sudo mkdir -p /var/www/azweb-example.com/public_html
Lệnh mkdir -p sẽ tạo cả thư mục cha nếu nó chưa tồn tại. Thư mục public_html sẽ là nơi chứa các file công khai của website.
Tiếp theo, bạn cần cấp quyền sở hữu thư mục này cho người dùng hiện tại để bạn có thể dễ dàng tạo và sửa file mà không cần quyền sudo mỗi lần.sudo chown -R $USER:$USER /var/www/azweb-example.com/public_html
Sau đó, hãy đảm bảo rằng quyền truy cập thư mục được thiết lập đúng cách để máy chủ web có thể đọc các file trong đó.sudo chmod -R 755 /var/www/azweb-example.com
Để kiểm tra, hãy tạo một trang index.html đơn giản trong thư mục public_html:sudo nano /var/www/azweb-example.com/public_html/index.html
Bên trong file, hãy thêm nội dung HTML sau:
<html>
<head>
<title>Chào mừng đến với AZWEB Example!</title>
</head>
<body>
<h1>Thành công! Virtual Host azweb-example.com đang hoạt động!</h1>
</body>
</html>
Lưu và đóng file lại (trong nano, nhấn Ctrl+X, sau đó Y, và Enter).

Tạo file cấu hình Virtual Host
Apache sử dụng các file cấu hình .conf để biết cách xử lý các yêu cầu cho từng tên miền. Các file này được lưu trong /etc/apache2/sites-available/. Chúng ta sẽ tạo một file cấu hình mới cho azweb-example.com.
Hãy tạo một file cấu hình mới bằng cách sao chép file cấu hình mặc định:sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/azweb-example.com.conf
Bây giờ, hãy mở file cấu hình mới tạo để chỉnh sửa:sudo nano /etc/apache2/sites-available/azweb-example.com.conf
Nội dung file sẽ trông tương tự như sau. Bạn cần chỉnh sửa các trường quan trọng:
<VirtualHost *:80>
ServerAdmin webmaster@azweb-example.com
ServerName azweb-example.com
ServerAlias www.azweb-example.com
DocumentRoot /var/www/azweb-example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Giải thích các trường quan trọng:
- ServerAdmin: Email của quản trị viên website.
- ServerName: Tên miền chính của website. Apache sẽ dựa vào đây để xác định Virtual Host nào sẽ xử lý yêu cầu.
- ServerAlias: Các tên miền phụ hoặc bí danh khác, ví dụ như
www. - DocumentRoot: Đường dẫn đến thư mục gốc của website, nơi chứa file
index.htmlmà chúng ta đã tạo.
Sau khi chỉnh sửa xong, hãy lưu và đóng file.

Kích hoạt Virtual Host và khởi động lại Apache
Sau khi đã tạo thư mục và file cấu hình, bước cuối cùng là “bật” Virtual Host mới và “tắt” Virtual Host mặc định để tránh xung đột. Apache cung cấp các công cụ tiện ích để thực hiện việc này một cách dễ dàng.
Sử dụng lệnh a2ensite (Apache2 Enable Site) để kích hoạt file cấu hình của bạn:sudo a2ensite azweb-example.com.conf
Tiếp theo, hãy tắt trang mặc định của Apache:sudo a2dissite 000-default.conf
Mỗi khi bạn thay đổi cấu hình, bạn cần kiểm tra xem có lỗi cú pháp nào không. Lệnh sau sẽ giúp bạn làm điều đó:sudo apache2ctl configtest
Nếu bạn nhận được thông báo “Syntax OK”, điều đó có nghĩa là mọi thứ đều ổn. Bây giờ, hãy khởi động lại Apache để áp dụng các thay đổi:sudo systemctl restart apache2
Vậy là xong! Virtual Host của bạn đã được thiết lập và sẵn sàng hoạt động. Bước tiếp theo là cấu hình DNS hoặc file hosts để kiểm tra.
Cấu hình và quản lý nhiều website trên cùng một máy chủ Apache
Khi bạn đã thiết lập thành công Virtual Host đầu tiên, việc thêm các website khác trở nên vô cùng đơn giản. Quá trình này về cơ bản là lặp lại các bước bạn vừa làm, nhưng với cấu hình và thư mục riêng cho từng website.
Cách cấu hình nhiều Virtual Hosts song song
Giả sử bạn muốn thêm một website thứ hai, ví dụ là azweb-project.net. Bạn chỉ cần lặp lại quy trình:
- Tạo thư mục mới:
sudo mkdir -p /var/www/azweb-project.net/public_html - Cấp quyền:
sudo chown -R $USER:$USER /var/www/azweb-project.net/public_html
sudo chmod -R 755 /var/www/azweb-project.net - Tạo file index.html mới: Tạo một file
index.htmlvới nội dung riêng cho azweb-project.net. - Tạo file cấu hình .conf mới:
sudo cp /etc/apache2/sites-available/azweb-example.com.conf /etc/apache2/sites-available/azweb-project.net.conf - Chỉnh sửa file cấu hình mới: Mở
azweb-project.net.confvà thay đổiServerName,ServerAlias, vàDocumentRootcho phù hợp với website mới.<VirtualHost *:80> ServerName azweb-project.net ServerAlias www.azweb-project.net DocumentRoot /var/www/azweb-project.net/public_html ... </VirtualHost> - Kích hoạt site mới:
sudo a2ensite azweb-project.net.conf - Khởi động lại Apache:
sudo systemctl restart apache2
Bằng cách này, bạn có thể thêm bao nhiêu website tùy ý. Apache sẽ tự động điều hướng các yêu cầu đến đúng thư mục dựa trên ServerName mà trình duyệt gửi lên. Việc quản lý các file .conf riêng biệt cũng giúp bạn dễ dàng bật hoặc tắt một website cụ thể bằng lệnh a2ensite và a2dissite mà không ảnh hưởng đến các website khác.

Quản lý DNS và file hosts để kiểm tra local
Sau khi cấu hình Virtual Host, bạn cần một cách để “bảo” máy tính của mình rằng tên miền đó trỏ về máy chủ của bạn. Có hai cách để làm điều này:
1. Kiểm tra trên máy local (máy tính cá nhân):
Đây là cách nhanh nhất để kiểm tra khi bạn đang phát triển. Bạn có thể chỉnh sửa file hosts trên máy tính của mình để ánh xạ tên miền ảo về địa chỉ IP của máy chủ.
- Trên Linux hoặc macOS, file này nằm ở
/etc/hosts. - Trên Windows, file này nằm ở
C:\Windows\System32\drivers\etc\hosts.
Bạn cần mở file này với quyền quản trị viên và thêm các dòng sau:SERVER_IP_ADDRESS azweb-example.com
SERVER_IP_ADDRESS azweb-project.net
Thay SERVER_IP_ADDRESS bằng địa chỉ IP của máy chủ Ubuntu của bạn (nếu đang chạy trên máy ảo hoặc máy chủ khác) hoặc 127.0.0.1 nếu bạn đang chạy Apache ngay trên máy tính cá nhân của mình.
2. Cấu hình cho máy chủ thực tế (Production):
Khi website sẵn sàng hoạt động công khai, bạn cần cấu hình DNS. Tại trang quản lý tên miền của bạn, hãy tạo một bản ghi “A” (A Record) trỏ tên miền (azweb-example.com) và các tên miền phụ (www.azweb-example.com) về địa chỉ IP công khai của máy chủ. Sau khi DNS cập nhật, người dùng từ khắp nơi trên thế giới sẽ có thể truy cập website của bạn.
Kiểm tra và đảm bảo máy chủ hoạt động đúng cách
Sau khi hoàn tất các bước cấu hình, việc kiểm tra lại toàn bộ hệ thống là cực kỳ quan trọng. Điều này giúp đảm bảo rằng mọi thứ đang hoạt động như mong đợi và phát hiện sớm các sự cố tiềm ẩn.
Kiểm tra cấu hình Apache
Apache cung cấp một công cụ tích hợp sẵn để kiểm tra cú pháp của các file cấu hình. Đây là bước bạn nên thực hiện mỗi khi thay đổi bất kỳ file .conf nào.
Hãy chạy lệnh sau trong terminal:sudo apache2ctl configtest
Nếu không có lỗi nào, bạn sẽ nhận được thông báo “Syntax OK”. Đây là tín hiệu tốt cho thấy các chỉ thị bạn viết trong file cấu hình là hợp lệ. Nếu có lỗi, terminal sẽ hiển thị tên file và số dòng gây ra lỗi, giúp bạn dễ dàng tìm và sửa chữa. Ví dụ, một lỗi phổ biến là gõ sai tên một chỉ thị hoặc quên đóng một thẻ.
Việc tạo thói quen chạy lệnh này trước khi khởi động lại Apache sẽ giúp bạn tránh được tình trạng dịch vụ không thể khởi động do lỗi cấu hình.

Xác thực truy cập website qua trình duyệt và công cụ kiểm tra
Cách đơn giản nhất để xác thực là mở trình duyệt web và truy cập vào tên miền bạn vừa cấu hình (ví dụ: http://azweb-example.com). Nếu bạn đã cấu hình file hosts hoặc DNS chính xác, bạn sẽ thấy trang index.html mà bạn đã tạo trước đó. Hãy thử truy cập cả tên miền có www và không có www để đảm bảo ServerAlias hoạt động đúng.
Nếu trang web không tải hoặc bạn gặp lỗi, nơi đầu tiên bạn nên tìm đến là các file log của Apache. Chúng nằm trong thư mục /var/log/apache2/.
error.log: Ghi lại tất cả các lỗi mà Apache gặp phải. Đây là file quan trọng nhất để chẩn đoán sự cố.access.log: Ghi lại mọi yêu cầu truy cập đến máy chủ, bao gồm địa chỉ IP của khách, trang được yêu cầu và mã trạng thái HTTP.
Bạn có thể xem nội dung của file log lỗi theo thời gian thực bằng lệnh tail:sudo tail -f /var/log/apache2/error.log
Lệnh này sẽ hiển thị các dòng log mới nhất khi chúng được ghi, giúp bạn thấy ngay lỗi xảy ra khi bạn cố gắng truy cập website.
Xử lý lỗi thường gặp khi thiết lập virtual hosts
Trong quá trình thiết lập, bạn có thể gặp phải một vài lỗi phổ biến. Đừng lo lắng, hầu hết chúng đều có nguyên nhân rõ ràng và cách khắc phục đơn giản. Dưới đây là hai lỗi thường gặp nhất và cách xử lý chúng.
Lỗi “403 Forbidden” do quyền truy cập
Lỗi “403 Forbidden” là một trong những lỗi phổ biến nhất. Nó có nghĩa là Apache có thể tìm thấy thư mục website của bạn, nhưng nó không được phép đọc các file bên trong. Nguyên nhân thường đến từ hai vấn đề chính.
1. Sai quyền thư mục (Folder Permissions):
Apache cần quyền để đọc và thực thi các file trong thư mục DocumentRoot. Nếu bạn quên cấp quyền hoặc cấp sai, lỗi 403 sẽ xảy ra.
- Cách sửa: Hãy đảm bảo rằng thư mục website và tất cả các thư mục cha của nó đều có quyền thực thi (
+x). Lệnh sau sẽ thiết lập quyền truy cập đúng cho thư mục website của bạn:sudo chmod -R 755 /var/www/azweb-example.com
2. Thiếu file index:
Theo mặc định, Apache sẽ tìm kiếm các file như index.html, index.htm, hoặc index.php trong DocumentRoot. Nếu không tìm thấy bất kỳ file nào trong số này, nó sẽ trả về lỗi 403 để ngăn người dùng xem danh sách các file trong thư mục.
- Cách sửa: Hãy chắc chắn rằng bạn đã tạo file
index.html(hoặc tên file index tương tự) và đặt nó trực tiếp bên trong thư mụcpublic_html.

Lỗi không load đúng website hoặc lỗi DNS
Một vấn đề khác là khi bạn truy cập tên miền nhưng lại thấy trang mặc định của Apache hoặc một website khác trên cùng máy chủ. Lỗi này thường liên quan đến cấu hình hoặc DNS.
1. Kiểm tra file cấu hình Virtual Host:
Hãy mở lại file .conf của bạn và kiểm tra kỹ các chỉ thị ServerName và ServerAlias. Đảm bảo rằng chúng được viết chính xác và không có lỗi chính tả. Mỗi Virtual Host phải có một ServerName duy nhất.
2. Kiểm tra file hosts và cấu hình DNS:
Nếu bạn đang kiểm tra trên máy local, hãy chắc chắn rằng file /etc/hosts của bạn đã được cấu hình đúng, trỏ tên miền về đúng địa chỉ IP của máy chủ. Nếu bạn sử dụng DNS công khai, hãy dùng các công cụ như nslookup hoặc dig để kiểm tra xem tên miền đã được phân giải về đúng IP hay chưa.nslookup azweb-example.com
3. Xóa cache trình duyệt và khởi động lại Apache:
Đôi khi, trình duyệt lưu lại cache DNS cũ. Hãy thử xóa cache trình duyệt hoặc sử dụng chế độ ẩn danh để kiểm tra lại. Cuối cùng, đừng quên khởi động lại Apache sau mỗi lần thay đổi cấu hình để chắc chắn rằng các thay đổi đã được áp dụng.sudo systemctl restart apache2
Những lưu ý và thực hành tốt khi sử dụng Apache Virtual Hosts
Việc thiết lập thành công Virtual Hosts chỉ là bước khởi đầu. Để quản trị hệ thống một cách hiệu quả, an toàn và bền vững, bạn nên tuân thủ các thực hành tốt nhất sau đây. AZWEB khuyến nghị bạn nên lưu ý những điểm này để tối ưu hóa máy chủ của mình.
- Luôn đặt giới hạn quyền truy cập hợp lý: Không bao giờ cấp quyền
777cho thư mục website. Hãy tuân thủ nguyên tắc đặc quyền tối thiểu, chỉ cấp các quyền thực sự cần thiết. Quyền755cho thư mục và644cho file thường là một lựa chọn an toàn. - Kiểm tra kỹ cấu hình trước khi kích hoạt: Luôn sử dụng lệnh
apache2ctl configtestđể kiểm tra lỗi cú pháp trước khi khởi động lại Apache. Thói quen này sẽ cứu bạn khỏi nhiều lần “sập” dịch vụ không đáng có.

- Không để file cấu hình mặc định gây xung đột: Sau khi đã thiết lập các Virtual Host của riêng mình, hãy vô hiệu hóa file cấu hình mặc định (
000-default.conf) bằng lệnha2dissite. Điều này ngăn chặn nó trở thành một “catch-all” server và gây ra các hành vi không mong muốn. - Lưu backup file cấu hình thường xuyên: Các file trong
/etc/apache2/là trái tim của máy chủ web của bạn. Hãy tạo bản sao lưu của thư mục này trước khi thực hiện bất kỳ thay đổi lớn nào. Bạn có thể sử dụnggithoặc đơn giản là nén chúng lại. - Thường xuyên cập nhật Apache và Ubuntu: Luôn cập nhật hệ điều hành và các gói phần mềm, bao gồm cả Apache, lên phiên bản mới nhất. Các bản cập nhật thường chứa các bản vá bảo mật quan trọng giúp bảo vệ máy chủ của bạn khỏi các lỗ hổng đã biết.
sudo apt update && sudo apt upgrade - Sử dụng logs riêng cho từng Virtual Host: Để dễ dàng theo dõi và gỡ lỗi, hãy cấu hình các file
ErrorLogvàCustomLogriêng biệt cho mỗi Virtual Host trong file.confcủa nó. Điều này giúp bạn tách biệt log của các website và phân tích vấn đề nhanh chóng hơn.
Kết luận
Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết từ việc tìm hiểu khái niệm Apache Virtual Hosts cho đến cách cài đặt, cấu hình và quản lý chúng trên Ubuntu 20.04. Bạn đã thấy được lợi ích to lớn của việc sử dụng máy chủ ảo: tiết kiệm chi phí, tối ưu hóa tài nguyên và đơn giản hóa việc quản lý nhiều website trên cùng một máy chủ. Đây là một kỹ năng nền tảng và cực kỳ quan trọng đối với bất kỳ ai làm việc trong lĩnh vực quản trị hệ thống hay phát triển web.
Kiến thức chỉ thực sự trở thành kỹ năng khi bạn thực hành. AZWEB khuyến khích bạn hãy tự tay thực hiện lại các bước đã được hướng dẫn. Hãy thử tạo thêm nhiều Virtual Host, thử nghiệm với các cấu hình khác nhau và làm quen với việc xử lý các lỗi thường gặp. Quá trình đó sẽ giúp bạn hiểu sâu hơn về cách Apache hoạt động và xây dựng sự tự tin trong việc quản trị máy chủ.
Để nâng cao kỹ năng, bạn có thể tìm hiểu thêm về các chủ đề nâng cao như cấu hình SSL với Let’s Encrypt cho Virtual Hosts, thiết lập các chỉ thị bảo mật trong .htaccess, hay tối ưu hiệu suất Apache. Nếu bạn thấy bài viết này hữu ích, đừng ngần ngại chia sẻ nó cho bạn bè và đồng nghiệp. Hãy tiếp tục theo dõi AZWEB để cập nhật những kiến thức và kỹ thuật mới nhất trong thế giới công nghệ web!
