Tìm kiếm trang web

Cách Cài Đặt Apache Virtual Hosts trên Máy Chủ Ubuntu


Giới thiệu

Máy chủ Apache HTTP là một máy chủ web mã nguồn mở phổ biến, cung cấp tính linh hoạt, mạnh mẽ và được hỗ trợ rộng rãi bởi các nhà phát triển. Cấu hình máy chủ Apache không diễn ra trong một tập tin đơn lẻ mà thay vào đó xảy ra thông qua thiết kế mô-đun, nơi các tập tin mới có thể được thêm vào và chỉnh sửa khi cần thiết. Trong thiết kế mô-đun này, bạn có thể tạo một trang web hoặc tên miền riêng gọi là máy chủ ảo.

Sử dụng máy chủ ảo, một phiên bản Apache có thể phục vụ nhiều trang web. Mỗi tên miền hoặc trang web riêng lẻ được cấu hình bằng Apache sẽ hướng khách truy cập đến một thư mục cụ thể chứa thông tin của trang web đó. Điều này được thực hiện mà không cho khách truy cập biết rằng cùng một máy chủ cũng chịu trách nhiệm cho các trang web khác. Sơ đồ này có thể mở rộng mà không có bất kỳ giới hạn phần mềm nào miễn là máy chủ của bạn có thể xử lý tải.

Trong hướng dẫn này, bạn sẽ thiết lập các máy chủ ảo Apache trên một máy chủ Ubuntu. Trong quá trình này, bạn sẽ học cách phục vụ nội dung khác nhau cho các khách truy cập khác nhau tùy thuộc vào miền mà họ yêu cầu bằng cách tạo hai trang máy chủ ảo.

Đã được xác thực trên các phiên bản Ubuntu gần đây: Các bước và lệnh trong hướng dẫn này đã được kiểm tra trên Ubuntu 20.04 LTS, 22.04 LTS và 24.04 LTS. Cấu trúc cấu hình của Apache (sites-available, sites-enabled, a2ensite, a2dissite) và cấu trúc thư mục được sử dụng ở đây giống nhau trên các phiên bản này.

Điểm chính

  • Máy chủ ảo cho phép một instance Apache phục vụ nhiều trang web; mỗi tên miền trỏ đến thư mục gốc tài liệu riêng của nó.
  • Bạn tạo một thư mục dưới /var/www cho mỗi trang web (ví dụ, /var/www/your_domain/public_html) và thiết lập quyền sở hữu cũng như quyền truy cập sao cho máy chủ web có thể đọc các tệp và người dùng của bạn có thể chỉnh sửa chúng.
  • Mỗi trang web sẽ có một tệp cấu hình riêng trong /etc/apache2/sites-available/ với ServerName, ServerAlias và DocumentRoot.
  • Sử dụng a2ensite và a2dissite để bật hoặc tắt các trang web, sau đó tải lại hoặc khởi động lại Apache để các thay đổi có hiệu lực.
  • Bạn có thể thử nghiệm mà không cần DNS thật bằng cách chỉnh sửa tệp hosts trên máy tính của bạn để trỏ các tên miền ví dụ về địa chỉ IP của máy chủ.

Điều kiện tiên quyết

Trước khi bắt đầu hướng dẫn này, bạn sẽ cần:

  • Một máy chủ Ubuntu với người dùng không phải root có quyền sudo. Bạn có thể sử dụng hướng dẫn Thiết lập Máy chủ Ban đầu với Ubuntu của chúng tôi để thiết lập điều này.
  • Apache đã được cài đặt trên máy chủ. Bạn có thể tìm hiểu cách thực hiện bằng cách hoàn thành các bước 1-3 trong hướng dẫn Cách Cài Đặt Máy Chủ Web Apache trên Ubuntu của chúng tôi.

Nếu bạn đang sử dụng Linux-Console.net, bạn có thể tìm hiểu cách thiết lập các tên miền bằng cách tham khảo tài liệu sản phẩm của chúng tôi, Cách thêm và thiết lập tên miền.

Để hoàn thành thành công hướng dẫn này, bạn sẽ cần hai miền với:

  • Một bản ghi A với your_domain trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
  • Một bản ghi A với www.your_domain trỏ tới địa chỉ IP công cộng của máy chủ của bạn.

Đối với các nhà cung cấp khác, vui lòng tham khảo tài liệu sản phẩm tương ứng của họ.

Lưu ý: Nếu bạn không có sẵn tên miền vào lúc này, bạn có thể sử dụng các giá trị thử nghiệm trên máy tính của mình. Bước 6 của hướng dẫn này sẽ chỉ cho bạn cách kiểm tra và cấu hình các giá trị thử nghiệm của mình. Điều này sẽ cho phép bạn xác thực cấu hình của mình ngay cả khi nội dung của bạn không có sẵn cho các khách truy cập khác thông qua tên miền.

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 sẽ chứa dữ liệu của trang web mà bạn sẽ cung cấp cho khách truy cập.

Thư mục gốc tài liệu của bạn, thư mục cấp cao nhất mà Apache xem để tìm nội dung phục vụ, sẽ được đặt thành các thư mục riêng lẻ dưới thư mục /var/www. Bạn sẽ tạo một thư mục tại đây cho mỗi máy chủ ảo.

Trong mỗi thư mục này, bạn sẽ tạo một thư mục public_html. Thư mục public_html chứa nội dung sẽ được phục vụ cho khách truy cập của bạn. Các thư mục cha, được gọi ở đây là your_domain_1 và your_domain_2, sẽ chứa các tập lệnh và mã ứng dụng để hỗ trợ nội dung web.

Sử dụng các lệnh này, với tên miền của riêng bạn, để tạo các thư mục của bạn:

sudo mkdir -p /var/www/your_domain_1/public_html

sudo mkdir -p /var/www/your_domain_2/public_html

Hãy chắc chắn thay thế your_domain_1 và your_domain_2 bằng các tên miền tương ứng của riêng bạn. Ví dụ, nếu một trong các tên miền của bạn là example.com, bạn sẽ tạo cấu trúc thư mục như sau: /var/www/example.com/public_html.

Bước 2 — Cấp quyền

Bạn đã tạo cấu trúc thư mục cho các tệp của mình, nhưng chúng đang thuộc sở hữu của người dùng root. Nếu bạn muốn người dùng thường của mình có thể chỉnh sửa các tệp trong các thư mục web này, bạn có thể thay đổi quyền sở hữu bằng các lệnh sau:

sudo chown -R $USER:$USER /var/www/your_domain_1/public_html

sudo chown -R $USER:$USER /var/www/your_domain_2/public_html

Biến $USER sẽ nhận giá trị của người dùng mà bạn đang đăng nhập khi nhấn ENTER. Bằng cách này, người dùng thông thường sẽ sở hữu các thư mục con public_html nơi bạn sẽ lưu trữ nội dung của mình.

Bạn cũng nên sửa đổi quyền truy cập của mình để đảm bảo rằng quyền đọc được phép đối với thư mục web chung và tất cả các tệp và thư mục mà nó chứa, để các trang có thể được phục vụ một cách chính xác:

sudo chmod -R 755 /var/www

Máy chủ web của bạn bây giờ đã có quyền cần thiết để phục vụ nội dung, và người dùng của bạn nên có thể tạo nội dung trong các thư mục cần thiết. Bước tiếp theo là tạo nội dung cho các trang web máy chủ ảo của bạn.

Bước 3 — Tạo các trang mặc định cho từng máy chủ ảo

Với cấu trúc thư mục đã sẵn sàng, bạn có thể bắt đầu tập trung vào từng trang web máy chủ ảo riêng lẻ và nội dung bên trong trang đó. Bắt đầu bằng cách tạo một trang index.html cho trang web đầu tiên của bạn your_domain_1.

Mở và tạo tệp index.html bằng trình soạn thảo văn bản mà bạn ưa thích. Ví dụ này sử dụng nano:

nano /var/www/your_domain_1/public_html/index.html

Trong tệp này, hãy tạo một tệp HTML để thông báo cho khách truy cập biết họ đang kết nối với trang web nào:

<html>
  <head>
    <title>Welcome to your_domain_1!</title>
  </head>
  <body>
    <h1>Success! The your_domain_1 virtual host is working!</h1>
  </body>
</html>

Để lưu và đóng tệp trong nano, bắt đầu bằng cách nhấn CTRL+X. Nhấn Y khi được nhắc để lưu tệp, sau đó nhấn ENTER khi bạn hoàn tất để thoát.

Tiếp theo, sao chép tập tin này để sử dụng làm cơ sở cho trang web thứ hai của bạn bằng cách gõ:

cp /var/www/your_domain_1/public_html/index.html /var/www/your_domain_2/public_html/index.html

Sau đó mở tệp mới này và chỉnh sửa các thông tin liên quan bằng trình soạn thảo văn bản của bạn như trước:

nano /var/www/your_domain_2/public_html/index.html
<html>
  <head>
    <title>Welcome to your_domain_2!</title>
  </head>
  <body> <h1>Success! The your_domain_2 virtual host is working!</h1>
  </body>
</html>

Lưu và đóng tệp này. Bây giờ bạn có một trang cho mỗi trang web mà bạn có thể sử dụng để kiểm tra cấu hình máy chủ ảo.

Bước 4 — Tạo các Tệp Máy Chủ Ảo Mới

Các tập tin máy chủ ảo xác định cấu hình thực tế của các máy chủ ảo của bạn và kiểm soát cách máy chủ web Apache phản hồi các yêu cầu từ các miền khác nhau. Để tìm hiểu thêm về bố cục và các tùy chọn toàn cục của Apache, hãy xem Hướng dẫn Cấu hình Máy chủ Web Apache trên VPS Ubuntu hoặc Debian.

Apache đi kèm với một tập tin máy chủ ảo mặc định có tên 000-default.conf. Bạn có thể sao chép tập tin này để tạo các tập tin máy chủ ảo cho từng tên miền của mình.

Sao chép tệp cấu hình mặc định sang miền đầu tiên:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/your_domain_1.conf

Hãy lưu ý rằng cấu hình mặc định của Ubuntu yêu cầu mỗi tệp máy chủ ảo phải kết thúc bằng .conf.

Mở tệp mới trong trình soạn thảo văn bản mà bạn ưa thích với quyền root:

sudo nano /etc/apache2/sites-available/your_domain_1.conf

Khi loại bỏ các chú thích, tệp sẽ giống 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 tệp này, tùy chỉnh các mục cho miền đầu tiên của bạn và thêm một số chỉ thị bổ sung. Phần máy chủ ảo này khớp với bất kỳ yêu cầu nào được thực hiện trên cổng 80, cổng HTTP mặc định.

Trước tiên, hãy thay đổi chỉ thị ServerAdmin thành một email mà quản trị viên trang web có thể nhận email:

ServerAdmin admin@your_domain_1

Sau đó, thêm hai chỉ thị bổ sung. Chỉ thị đầu tiên, gọi là ServerName, thiết lập tên miền cơ bản cho định nghĩa máy chủ ảo. Chỉ thị thứ hai, gọi là ServerAlias, xác định các tên khác mà nên khớp như thể chúng là tên cơ bản. Điều này hữu ích để khớp với các máy chủ bổ sung mà bạn đã định nghĩa. Ví dụ, nếu bạn đặt chỉ thị ServerName thành example.com, bạn có thể định nghĩa một ServerAlias là www.example.com, và cả hai sẽ trỏ đến địa chỉ IP của máy chủ này.

Thêm hai chỉ thị này vào tệp cấu hình của bạn sau dòng ServerAdmin:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_1
    ServerName your_domain_1
    ServerAlias www.your_domain_1
    DocumentRoot /var/www/html
    ...
</VirtualHost>

Tiếp theo, thay đổi vị trí tệp máy chủ ảo của bạn cho thư mục gốc tài liệu của miền này. Chỉnh sửa chỉ thị DocumentRoot để trỏ đến thư mục mà bạn đã tạo cho máy chủ này:

DocumentRoot /var/www/your_domain_1/public_html

Dưới đây là một ví dụ về tệp máy chủ ảo với tất cả các điều chỉnh đã thực hiện ở trên:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_1
    ServerName your_domain_1
    ServerAlias www.your_domain_1
    DocumentRoot /var/www/your_domain_1/public_html
    ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ...
</VirtualHost>

Lưu và đóng tệp.

Tạo tệp cấu hình thứ hai của bạn bằng cách sao chép tệp từ trang máy chủ ảo đầu tiên của bạn:

sudo cp /etc/apache2/sites-available/your_domain_1.conf /etc/apache2/sites-available/your_domain_2.conf

Mở tệp mới trong trình soạn thảo bạn ưa thích:

sudo nano /etc/apache2/sites-available/your_domain_2.conf

Bây giờ bạn cần chỉnh sửa tất cả các thông tin để tham chiếu đến tên miền thứ hai của bạn. Khi hoàn tất, nó sẽ trông như sau:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_2
    ServerName your_domain_2
    ServerAlias www.your_domain_2
    DocumentRoot /var/www/your_domain_2/public_html
    ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ...
</VirtualHost>

Lưu và đóng tệp khi bạn đã hoàn tất.

Bước 5 — Kích hoạt các tệp Máy chủ Ảo Mới

Bây giờ bạn đã tạo các tệp máy chủ ảo của mình, bạn phải kích hoạt chúng. Apache bao gồm một số công cụ cho phép bạn làm điều này.

Bạn sẽ sử dụng công cụ a2ensite để kích hoạt từng trang web của mình. Nếu bạn muốn tìm hiểu thêm về script này, bạn có thể tham khảo trang hướng dẫn a2ensite.

Sử dụng các lệnh sau để kích hoạt các trang máy chủ ảo của bạn:

sudo a2ensite your_domain_1.conf

sudo a2ensite your_domain_2.conf

Sẽ có kết quả cho cả hai trang web, tương tự như ví dụ dưới đây, nhắc bạn khởi động lại máy chủ Apache của mình:

Enabling site example.com.
To activate the new configuration, you need to run:
  systemctl reload apache2

Trước khi tải lại máy chủ của bạn, hãy vô hiệu hóa trang web mặc định được định nghĩa trong 000-default.conf bằng cách sử dụng lệnh a2dissite:

sudo a2dissite 000-default.conf
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2

Tiếp theo, kiểm tra các lỗi cấu hình:

sudo apache2ctl configtest

Bạn nên nhận được kết quả sau:

. . .
Syntax OK

Khi bạn hoàn tất, khởi động lại Apache để các thay đổi này có hiệu lực.

sudo systemctl restart apache2

Ngoài ra, bạn có thể kiểm tra trạng thái của máy chủ sau tất cả những thay đổi này bằng lệnh sau:

sudo systemctl status apache2

Máy chủ của bạn bây giờ nên được cài đặt để phục vụ hai trang web. Nếu bạn đang sử dụng tên miền thực, bạn có thể bỏ qua Bước 6 và chuyển sang Bước 7. Nếu bạn đang kiểm tra cấu hình của mình trên máy tính cục bộ, hãy làm theo Bước 6 để tìm hiểu cách kiểm tra thiết lập của bạn bằng máy tính cá nhân.

Bước 6 — (Tùy chọn) Cài đặt Tệp Hosts cục bộ

Nếu bạn chưa sử dụng các tên miền thực sự mà bạn sở hữu để thử nghiệm quy trình này và đã sử dụng các tên miền ví dụ thay thế, bạn vẫn có thể kiểm tra chức năng của các trang web máy chủ ảo bằng cách tạm thời chỉnh sửa tập tin hosts trên máy tính cá nhân của bạn. Việc này sẽ chặn mọi yêu cầu tới các tên miền mà bạn đã cấu hình và trỏ chúng đến Máy chủ Riêng Ảo (VPS) của bạn, giống như hệ thống DNS sẽ làm nếu bạn sử dụng các tên miền đã đăng ký. Điều này chỉ hoạt động trên máy tính cá nhân của bạn và chỉ phục vụ mục đích thử nghiệm.

Hãy chắc chắn rằng bạn đang thực hiện các bước này trên máy tính cục bộ của mình chứ không phải trên máy chủ VPS. Bạn sẽ cần biết mật khẩu quản trị của máy tính hoặc phải là thành viên của nhóm quản trị.

Nếu bạn đang sử dụng máy tính Mac hoặc Linux, hãy chỉnh sửa tệp cục bộ của bạn với quyền quản trị bằng cách gõ:

sudo nano /etc/hosts

Nếu bạn đang sử dụng máy tính Windows, hãy mở Command Prompt và gõ:

notepad %windir%\system32\drivers\etc\hosts

Các chi tiết bạn cần thêm là địa chỉ IP công cộng của máy chủ của bạn, sau đó là tên miền mà bạn muốn sử dụng để truy cập máy chủ đó. Sử dụng các tên miền được dùng trong hướng dẫn này, và thay địa chỉ IP máy chủ của bạn vào chỗ your_server_IP, tệp của bạn sẽ trông như sau:

127.0.0.1   localhost
127.0.1.1   guest-desktop
your_server_IP your_domain_1
your_server_IP your_domain_2

Điều này sẽ chuyển mọi yêu cầu cho hai miền của bạn trên máy tính của bạn và gửi chúng đến máy chủ của bạn tại địa chỉ IP được chỉ định.

Lưu và đóng tệp.

Bước 7 — Kiểm tra kết quả của bạn

Bây giờ bạn đã cấu hình các máy chủ ảo của mình, bạn có thể kiểm tra cài đặt bằng cách truy cập các tên miền mà bạn đã cấu hình trong trình duyệt web của mình:

http://your_domain_1

Bạn cũng có thể truy cập trang máy chủ thứ hai của mình và xem tệp bạn đã tạo cho trang web thứ hai:

http://your_domain_2

Nếu cả hai trang web này hoạt động như mong đợi, bạn đã cấu hình thành công hai máy chủ ảo trên cùng một máy chủ.

Lưu ý: Nếu bạn đã chỉnh sửa tệp hosts trên máy tính cục bộ của mình, như trong Bước 6 của hướng dẫn này, bạn có thể muốn xóa các dòng bạn đã thêm sau khi đã xác nhận rằng cấu hình của bạn hoạt động. Điều này sẽ ngăn 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.

Câu hỏi thường gặp

1. Apache Virtual Hosts là gì?

Các máy chủ ảo Apache là một cách để chạy nhiều hơn một trang web trên cùng một máy chủ Apache. Mỗi máy chủ ảo có tên miền riêng (hoặc tên miền phụ), thư mục gốc tài liệu và các thiết lập riêng. Người truy cập chỉ thấy trang web cho tên miền mà họ yêu cầu; họ không biết rằng các trang web khác cũng đang nằm trên cùng một máy chủ.

2. Apache có thể xử lý bao nhiêu máy chủ ảo?

Apache không giới hạn số lượng máy chủ ảo. Bạn có thể thêm bao nhiêu tùy thích miễn là máy chủ của bạn đủ tài nguyên. Mỗi trang web mới cần một tệp cấu hình riêng trong /etc/apache2/sites-available/, một thư mục riêng trong /var/www, và sau đó bạn kích hoạt nó bằng a2ensite và tải lại Apache.

3. Sự khác biệt giữa ServerName và ServerAlias là gì?

Các chỉ thị ServerName và ServerAlias xác định các tên máy chủ mà Apache nên phản hồi cho từng máy chủ ảo, nhưng chúng phục vụ những mục đích hơi khác nhau:

Chỉ thịMô tảVí dụ
ServerName
Tên máy chủ chính, chuẩn cho máy chủ ảo. Apache khớp chính xác với tên này.
example.com
ServerAlias
Các tên máy chủ thay thế cũng trỏ đến máy chủ ảo này, bao gồm cả ký tự đại diện.
www.example.com, *.example.com

Nó hoạt động như thế nào?

  • Sử dụng ServerName cho tên miền chính.
  • Sử dụng ServerAlias cho các tên máy chủ khác (như các phiên bản www. hoặc các tên miền phụ) mà nên hiển thị cùng nội dung trang web.

Bất kỳ yêu cầu nào khớp với ServerName hoặc bất kỳ mục ServerAlias nào sẽ được phục vụ bởi máy chủ ảo đó. Để biết thêm thông tin, hãy xem tài liệu chính thức của Apache về máy chủ ảo.

4. Tôi có cần một tên miền cho các máy chủ ảo không?

Bạn không cần một tên miền đã đăng ký để theo hướng dẫn này. Bạn có thể sử dụng các tên máy chủ ví dụ và chỉ chúng tới máy chủ của bạn bằng cách chỉnh sửa tệp hosts trên máy tính của bạn (xem Bước 6). Đối với một trang web mà người khác có thể truy cập qua internet, bạn cần một tên miền thật và các bản ghi DNS trỏ nó tới máy chủ của bạn. Nếu bạn sử dụng Linux-Console.net, bạn có thể thêm và quản lý các tên miền trong bảng điều khiển; xem hướng dẫn nhanh về DNS của chúng tôi để biết cách thêm một tên miền.

5. Các tệp máy chủ ảo của Apache được lưu ở đâu?

Trên Ubuntu và Debian, các cấu hình máy chủ ảo nằm trong /etc/apache2/sites-available/. Mỗi trang web có một file .conf tại đó (ví dụ, example.com.conf). Kích hoạt một trang web bằng a2ensite sẽ thêm một liên kết tượng trưng trong /etc/apache2/sites-enabled/ trỏ đến file đó. Trang mặc định phản hồi khi không có máy chủ nào khác phù hợp là 000-default.conf.

Kết luận

Bây giờ bạn có một máy chủ duy nhất xử lý hai tên miền riêng biệt. Bạn có thể mở rộng quá trình này bằng cách làm theo các bước mà chúng tôi đã nêu ở trên để thêm các máy chủ ảo bổ sung. Không có giới hạn phần mềm về số lượng tên miền mà Apache có thể xử lý, vì vậy bạn có thể tạo bao nhiêu máy chủ ảo tùy thuộc vào khả năng của máy chủ của bạn.

Các bước tiếp theo và tài nguyên liên quan

  • Củng cố Apache và thêm HTTPS: Sau khi các máy chủ ảo hoạt động, bạn có thể thêm TLS bằng cách làm theo Hướng dẫn Bảo mật Apache với Let’s Encrypt trên Ubuntu và tối ưu hóa máy chủ bằng Hướng dẫn Cấu hình Máy chủ Web Apache trên VPS Ubuntu hoặc Debian.
  • Bộ LAMP đầy đủ: Để thêm MySQL và PHP trên cùng một máy chủ Ubuntu, hãy làm theo hướng dẫn Cách Cài Đặt Bộ LAMP trên Ubuntu.
  • Sản phẩm của Linux-Console.net: Sử dụng Droplets để chạy Ubuntu và Apache, và DNS để quản lý các bản ghi miền và trỏ các miền của bạn về máy chủ. Tài liệu sản phẩm: Thêm một miền (Hướng dẫn nhanh DNS).

Cảm ơn bạn đã học cùng cộng đồng Linux-Console.net.