» » Tạo Virtual Host trên Apache để chạy nhiều web trên 1 server

Tạo Virtual Host trên Apache để chạy nhiều web trên 1 server

Tạo virtual host trên Apache giúp bạn thêm domain vào VPS và chạy nhiều web trên 1 server. Điều này là rất dễ dàng với Apache 2.4 trên máy chủ Ubuntu.

Apache là máy chủ web phổ biến nhất hiện nay. Nó mạnh mẽ và dễ sử dụng, đặc biệt nếu bạn chạy nó trên Ubuntu. Apache chia các chức năng và thành phần của nó ra riêng rẽ, vì thế bạn có thể dễ dàng để cấu hình và quản lý.

Tạo Virtual Host trên Apache để chạy nhiều web trên 1 serverMột phần không thể thiếu của một máy chủ web (bao gồm cả Apache, Nginx, Lighttpd…) là chạy nhiều web trên 1 server. Bạn có thể thêm domain vào máy chủ và cấu hình chúng riêng rẽ. Mỗi cấu hình như vậy được gọi là một virtual host.

Mỗi một virtual host sẽ quy định cho mỗi tên miền riêng biệt. Bạn có thể tạo ra vô số virtual host để thêm domain vào VPS và chạy nhiều web trên 1 server.

Trong bài viết này, mình sẽ hướng dẫn bạn tạo virtual host trên Apache 2.4 chạy Ubuntu.

Cài đặt Apache 2.4 trên Ubuntu

Nếu bạn đang chạy Ubuntu 12.04, hãy tham khảo hướng dẫn cài đặt Apache 2.4 mới nhất trên Ubuntu. Với các phiên bản Ubuntu 14.04 hoặc mới hơn, bạn vẫn có thể cài đặt Apache mới nhất theo hướng dẫn trước đó.

Tại sao nên cài đặt Apache 2.4 mới nhất? Vì nó hỗ trợ nhiều tính năng hơn và được tối ưu hóa hơn. Cũng như việc một số lỗi trên phiên bản cũ được cố định.

Sử dụng lệnh sau để cài đặt Apache:

$ sudo apt-get update
$ sudo apt-get install apache2

Trong bài viết này, mình sẽ thêm hai tên miền là vidu1.comvidu2.com để làm ví dụ. Bạn vui lòng thay đổi thông tin thành tên miền của bạn nhé.

Tạo Virtual Host trên Apache

Bước 1: Tạo thư mục cho trang web

Đầu tiên, bạn cần tạo ra hai thư mục để chứa tập tin và dữ liệu của hai trang web trên. Mặc định Apache sử dụng /var/www làm thư mục chủ. Và mình sẽ tạo ra hai thư mục ở đó để lưu trữ dữ liệu cho hai trang web. Bạn có thể tạo thư mục ở bất kỳ đâu mà bạn muốn, theo ví dụ ở đây mình sẽ có hai thư mục là /var/www/vidu1.com và /var/www/vidu2.com.

Thông thường người ta sẽ sử dụng một thư mục con để lưu trữ dữ liệu để xử lý trang web cho người truy cập là public_html. Mục đích của điều này là để phục vụ lưu trữ dữ liệu một cách linh hoạt, bạn có thể lưu dữ liệu chỉ dành cho admin ở một thư mục khác.

Tạo hai thư mục bằng hai lệnh sau:

$ sudo mkdir -p /var/www/vidu1.com/public_html
$ sudo mkdir -p /var/www/vidu2.com/public_html

Bước 2: Tạo tập tin cấu hình virtual host

Trên Ubuntu, các tập tin cấu hình virtual host của Apache sẽ nằm trong thư mục /etc/apache2/sites-available. Bạn sẽ nhìn thấy hai virtual host mặc định là 000-default.conf và default-ssl.conf, ở đây mình sẽ dựa trên 2 virtual host này để thêm cấu hình cho domain khác.

Để kiểm tra các virtual host có sẵn, sử dụng lệnh sau:

$ ls -l /etc/apache2/sites-available

Sao chép 2 virtual host mặc định cho hai tên miền mới:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/vidu1.com.conf
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/vidu2.com.conf

Mở và chỉnh sửa tập tin cấu hình/etc/apache2/sites-available/vidu1.com.conf

$ sudo nano /etc/apache2/sites-available/vidu1.com.conf

Bạn sẽ nhìn thấy nội dung như sau:

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request’s Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

# Available loglevels: trace8, …, trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with “a2disconf”.
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Ở trên bạn sẽ có một số thông tin cần cấu hình lại:

  • ServerName: ở đây cần sửa lại thành domain của bạn, như ví dụ ở trên là vidu1.com. Bỏ dấu # ở trước đi nhé.
  • ServerAdmin: email của bạn cho domain này
  • DocumentRoot: đây là thư mục sẽ lưu trữ trang web mà bạn đã tạo ở trên, như ví dụ ở trên là /var/www/vidu1.com/public_html
  • ServerAlias: mặc định sẽ không có mục này. Tuy nhiên bạn có thể thêm nó ở phía dưới ServerName. Thông số này giống như Parked domain hay CNAME vậy.

Sau khi chỉnh sửa, bạn sẽ có một tập tin cấu hình virtual host với nội dung như sau:

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request’s Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName vidu1.com
ServerAlias www.vidu1.com

ServerAdmin webmaster@vidu1.com
DocumentRoot /var/www/vidu1.com/public_html

# Available loglevels: trace8, …, trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with “a2disconf”.
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Lưu lại và tiếp tục mở tập tin virtual host thứ 2:

$ sudo nano /etc/apache2/sites-available/vidu2.com.conf

Cũng chỉnh sửa tương tự như trước:

ServerName vidu2.com
ServerAlias www.vidu2.com

ServerAdmin webmaster@vidu2.com
DocumentRoot /var/www/vidu2.com/public_html

Đối với virtual host sử dụng SSL để chạy HTTPS, mình sẽ nói ở bài tiếp theo.

Bước 3: Bật virtual host để các cấu hình hoạt động

Sử dụng lệnh sau để bật virtual host:

$ sudo a2ensite vidu1.com.conf
$ sudo a2ensite vidu2.com.conf

Khởi động lại máy chủ web Apache

$ sudo service apache2 restart

Có thể bạn sẽ gặp thông báo sau, nhưng nó không ảnh hưởng tới trang web của bạn nhé

AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1. Set the ‘ServerName’ directive globally to suppress this message

Bước 4: kiểm tra xem việc tạo virtual host trên Apache đã đúng chưa

Để kiểm tra xem việc tạo virtual host trên Apache xem đã đúng chưa, bạn cần phải tạo 2 tập tin và chạy nó trên trình duyệt.

Tạo tập tin index.html trong /var/www/vidu1.com/public_html và /var/www/vidu2.com/public_html

$ sudo nano /var/www/vidu1.com/public_html/index.html
$ sudo nano /var/www/vidu2.com/public_html/index.html

Với nội dung như sau, nhớ thay thế nội dung để phân biệt 2 trang web nhé:

<html>
<head>
<title>vidu1.com lam viec tot!</title>
</head>
<body>
<h1>OK! Tao virtual host cho vidu1.com thanh cong!</h1>
</body>
</html>

Cuối cùng, trỏ domain về IP của server, sau khi DNS được cập nhật thì bạn truy cập vào địa chỉ vidu1.com và vidu2.com. Nếu bạn nhìn thấy trang web hiển thị đúng như trên thì việc thêm domain vào VPS đã thành công.

Bạn có thể tạo virtual host trên Apache để thêm domain vào VPS và chạy nhiều web trên 1 server với số lượng không giới hạn. Miễn là server của bạn có đủ khả năng để xử lý. Chúc thành công!

 

Thích hoặc chia sẽ bài này

  • Phong Nguyen

    Sao mình không tìm thấy file 000-default.conf như trong hướng dẫn nhỉ?

    • Nguyễn Tứ

      Bạn đang dùng phiên bản Apache 2.4 trên Ubuntu thì mới có bạn ạ 😀

  • file 000-default.conf lên ao 2.4 là sẽ thấy bác nhé

  • pdnceo

    Ủa nếu VPS có cấu hình 1 Core Ram 1G thì chạy được khoảng bao nhiêu site nhỉ?

    • Tùy thuộc vào số lượt truy cập và hiệu suất của máy chủ chứ số lượng site thì không giới hạn đâu bạn!

      • pdnceo

        Làm sao mình đo được hiệu suất là lượt truy cập bạn nhỉ?

        • Cái đấy thì mình không biết. Mỗi lượt truy cập thì máy chủ đều phải xử lý, nếu máy chủ xử lý tốn càng tốn nhiều tài nguyên thì lượt truy cập được càng ít. Cho nên bạn nên áp dụng một số phương pháp tối ưu hóa như sử dụng CDN, Cache…