Cách tạo domain ảo trong linux

Tháng trước tớ có 1 task switch qua PHP để làm 1 tool hack data nho nhỏ, sử dụng Apache 2 làm webserver.

Trước giờ tớ toàn chạy bằng XAMPP hoặc Laragon, chỉ cần chọn webserver folder là cứ code thôi, không cần config riêng gì cả. Sang thằng Apache 2 này thì cần config riêng nên tớ loay hoay mãi chả biết config thế nào, đành nhờ anh @Phúc cấu hình giúp.

Cơ mà anh ấy cấu hình nhanh quá, tớ chả kịp nhìn. Lại phải làm task gấp nên tớ quên khuấy mất hỏi lại.

Vừa rồi tớ làm 1 cái tool nho nhỏ để generate ra config cho đỡ mệt, sử dụng PHP, nên tớ tạt qua hỏi lại anh cách cấu hình và về note ra bài này :)))

Quá trình sửa gồm 3 bước

  1. Sửa config trong apache
  2. Thêm tên miền ảo
  3. Restart lại apache

Sửa config Apache

cd vào /etc/apache2/sites-available, tạo file config cho website của bạn. Nên đặt ở dạng ten-web.conf. Nếu apache của bạn đặt ở folder khác thì thay đường dẫn apache 2 của bạn vào.

VD: web bạn có tên miền ảo là learn-vue.vn thì đặt là learn-vue.conf

Sửa file config với nội dung như sau:


This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters

<VirtualHost *:80>
ServerName learn-vue.vn
DocumentRoot /home/adminpc/workspace/vue/learn-vue
<Directory /home/adminpc/workspace/vue/learn-vue>
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Trong đó:

Server name: tên miền ảo mà bạn muốn đặt.

Document root: là thư mục chứa code website

Directory: cũng đặt trùng với document root

Sau đó coppy file này vào /etc/apache2/sites-enabled. Có thể sử dụng lệnh này cho nhanh

cp learn-vue.conf ../sites-enabled/learn-vue.conf

Thêm tên miền ảo

Để thêm tên miền ảo, bạn sửa file hosts trong máy ở đường dẫn /etc/hosts. Thêm tên miền ảo mà bạn định sử dụng vào đây. Cụ thể như hình dưới, tớ thêm tên miền

127.0.0.1 learn-vue.vn

Cách tạo domain ảo trong linux

Sửa file hosts trên linux

Restart lại apache

Cuối cùng, bạn cần restart lại apache2

sudo service apache 2 restart

Tham khảo thêm

Ngoài ra tớ có 1 bài hướng dẫn cấu hình tên miền ảo cho XAMPP ở đây:

[Hướng dẫn] Thêm tên miền ảo – Virtual domain trong XAMPP

và cho tomcat ở đây:

[Hướng dẫn] Thêm tên miền ảo – Virtual Domain trong Apache Tomcat trên Window

Good luck ^^

Trong bài này mình sẽ hướng dẫn các bạn cách tạo Apache Virtual Host trên Ubuntu, đây là cách mà bạn thiết lập để chạy nhiều website trên Server Ubuntu.

Máy chủ ảo (virtual host) là cách cấu hình Apache cho phép bạn chạy nhiều domain trên một máy chủ Apache duy nhất. Với Máy chủ ảo, bạn có thể chỉ định thư mục gốc của trang web (thư mục chứa các file của trang web), tạo chính sách bảo mật riêng cho từng trang web, sử dụng các chứng chỉ SSL khác nhau.

Để tạo một domain của server Apache Ubuntu thì trước tiên bạn phải chuẩn bị một số thứ sau:

  • Đã mua một VPS để sử dụng, nếu chưa có thì tìm mua trong bài viết VPS tốt nhất.
  • Mua domain và trỏ domain về địa chỉ IP của server. Nếu bạn chưa biết cách làm thì xem tại bài viết hướng dẫn trỏ tên miền về hosting.
  • Đã tiến hành cài đặt Apache trênUbuntu
  • Bạn đang đăng nhập bằng user sudo trên Ubuntu.

Nếu bạn đang sử dụng Nginx thì có thể tham khảo tại bài viết cách thiết lập nhiều domain máy chủ Nginx trên Ubuntu 20.04.

Ok, giờ ta bắt đầu thôi.

1. Cấu trúc thư mục của Virtual Host Apache trên Linux

Trên Apache Server, mỗi website sẽ có một thư mục chứa mã nguồn riêng, hay còn gọi là thư mục gốc. Nhiệm vụ của server là dựa vào domain đang request để gọi tới đúng thư mục gốc.

Ví dụ dưới đây là cấu trúc thư mục của hai website, được đặt trong /var/ww/.

/var/www/
├── domain1.com
│   └── public_html
├── domain2.com
│   └── public_html

Như vậy, mỗi website sẽ có thư mục gốc dạng như sau:

/var/www/<domain_name>/public_html

Bây giờ mình cần tạo host cho domain1.com thì các bước thực hiện như sau.

Đầu tiên hãy chạy lệnh dưới đây để tạo thư mục gốc cho domain1 bằng cách sử dụng lệnh mkdir.

sudo mkdir -p /var/www/domain1.com/public_html

Bạn chú ý nhé, tên của thư mục phải trùng với tên của domain.

Bây giờ ta sẽ tạo một file index.html nằm trong thư mục public_html vừa tạo, để khi chạy web thì file này sẽ được chạy.

/var/www/domain1.com/public_html/index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Welcome to domain1.com</title>
  </head>
  <body>
    <h2>Success! domain1.com home page!</h2>
  </body>
</html>

Giống như trong bài Nginx, vì mình sử dụng lệnh sudo để tạo các file nên nó thuộc quyền sở hữu của nhóm root. Để tránh các vấn đề rắc rối về phân quyền sau này thì hãy đổi nó sang sở hữu của Apache (www-data).

sudo chown -R www-data: /var/www/domain1.com

2. Tạo Virual Host Apache để chạy nhiều web trên Ubuntu 20.04

Trên hệ thống của Ubuntu, file cấu hình virtual host các domain có sẵn nằm trong thư mục /etc/apache2/sites-available. Nó có thể được kích hoạt bằng cách tạo một symbolic links tới thư mục /etc/apache2/sites-enabled, và Apache sẽ đọc trong khi chạy.

Hãy sử dụng text editor bất kì để mở file /etc/apache2/sites-available/domain1.com.conf lên nhé. Mình sử dụng VI Editor, rồi nhập nội dung sau vào:

/etc/apache2/sites-available/domain1.com.conf

<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias www.domain1.com
    ServerAdmin 
    DocumentRoot /var/www/domain1.com/public_html

    <Directory /var/www/domain1.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/domain1.com-error.log
    CustomLog ${APACHE_LOG_DIR}/domain1.com-access.log combined
</VirtualHost>

Trong đó:

  • ServerName là tên của domain.
  • ServerAlias là danh sách sub domain hoặc domain có www.
  • DocumentRoot là thư mục chứa mã nguồn website.
  • Options: sẽ có hai sựa lựa chọn:
    • Indexes: Sử dụng đường link thực
    • FollowSymLinks: Sư dụng đường link ảo (symlink)
  • AllowOverride cho phép sử dụng .htaccess để ghi đè cấu hình server.
  • ErrorLog, CustomLog là hai file lưu log.

Bạn có thể đặt một cái tên bất kì cho file cấu hình mỗi trang web. Tuy nhiên, khuyến khích bạn đặt theo tên domain, vì khi bạn quản lý nhiều domain sẽ dễ dàng nhớ và phân biệt giữa chúng.

Để kích hoạt máy ảo thì mình sử dụng a2ensite script để hỗ trợ để tạo symbolic link từ virtual host đến thư mục sites-enabled.

sudo a2ensite domain1.com

Và dưới đây là lệnh tạo symbolic link:

sudo ln -s /etc/apache2/sites-available/domain1.com.conf /etc/apache2/sites-enabled/

Chạy xong tihì hãy tiếp tục thực hiện lệnh này để test nhé:

sudo apachectl configtest

Nếu kết quả trả vè như sau là bạn đã thành công:

Khởi động lại Apache để áp dụng những thay đổi:

sudo systemctl restart apache2

Cuối cùng, hãy truy cập vào http://domain1.com để xem thành quả mà bạn đã làm nhé.

Như vậy là mình đã hướng dẫn xong cách tạo Virtual Host Apache trên Ubuntu 20.04. Qua bài này bạn đã biết cách tạo và quản lý nhiều domain trên Ubuntu server thông qua Apache.