Tương tự như bài viết hướng dẫn add thêm website chạy trên VPS nginx CentOS, hôm nay mình sẽ hướng dẫn các bạn cách thực hiện trên webserver Apache.

Giới thiệu Virtual Hosts

Virtual Hosts được sử dụng để giúp cho một VPS có thể chạy được nhiều website khác nhau. 

Lưu ý: Việc thêm website như hướng dẫn chỉ áp dụng với hệ thống tự thiết lập hoàn toàn. Nếu bạn sử dụng các hệ quản trị như HocVPS Script, CentminMod, EasyEngine, VestaCP, Sentora, VPSSIM… thì add bằng menu của hệ quản trị đó để đảm bảo đầy đủ và tránh xung đột. Ví dụ, HocVPS bạn gõ lệnh hocvps trên SSH chọn menu 2) Them Domain

Các bước add thêm website trên VPS Apache chạy CentOS bằng Virtual Hosts như sau:

Chuẩn bị server

Đã cài đặt sẵn webserver Apache trên CentOS, có thể tham khảo bài viết cài đặt LAMP trên CentOS

Tạo thư mục chứa website

Ví dụ mình sẽ tạo thư mục ở folder /var/www nhé

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

Chú ý thay example.com bằng domain của bạn.

Gán quyền

Đảm bảo cho website hoạt động bình thường

sudo chown -R apache:apache /var/www/example.com/public_html

Ngoài ra chmod 755 để đảm bảo mọi người có thể xem được website của bạn

sudo chmod 755 /var/www

Cài đặt Virtual Hosts

Mình sẽ chỉnh sửa file cấu hình mặc định của Apache

sudo nano /etc/httpd/conf/httpd.conf

Thêm đoạn sau vào cuối file:

NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#    

#    
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
# 
<VirtualHost *:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /var/www/example.com/public_html
     ServerName www.example.com
     ServerAlias example.com
     ErrorLog /var/www/example.com/error.log
     CustomLog /var/www/example.com/requests.log common
</VirtualHost>

Bạn cần chú ý các dòng NameVirtualHost, Virtual Host, Document Root, and Server Name để sửa lại cho phù hợp.

Lưu lại và thoát.

Khởi động lại Apache

Dừng tất cả tiến trình Apache

sudo apachectl -k stop

Khởi động Apache

sudo /etc/init.d/httpd start

Test thử domain

Giờ mình sẽ tạo thử file index.html để test thử domain example.com có hoạt động đúng không nhé.

sudo nano /var/www/example.com/public_html/index.html

Thêm đoạn code html vào file

<html>
  <head>
    <title>www.example.com</title>
  </head>
  <body>
    <h1>Success: You Have Set Up a Virtual Host</h1>
  </body>
</html>

Lưu và thoát.

Bây giờ bạn hãy test thử với link http://example.com, nếu kết quả hiện ra như bên dưới là thành công.

test thu example.com

Cài đặt thêm Virtual Hosts

Để add thêm nhiều website nữa, bạn có thể lặp đi lặp lại bước. Cấu trúc file config của Apache lúc nãy sẽ tương tự như sau:

<VirtualHost *:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /var/www/example.com/public_html
     ServerName www.example.com
     ServerAlias example.com
     ErrorLog /etc/var/www/example.com/error.log
     CustomLog /var/www/example.com/requests.log common
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin webmaster@example.org
     DocumentRoot /var/www/example.org/public_html
     ServerName www.example.org
     ServerAlias example.org
     ErrorLog /var/www/example.org/error.log
     CustomLog /var/www/example.org/requests.log common
</VirtualHost>

Khởi động lại Apache là tất cả các website sẽ hoạt động.

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

118 Comments

  1. Phuong Nguyen 1 comment

    Mình có làm theo hướng dẫn này để chạy 1 vhost. Tuy nhiên khi dùng ip vpn thì không thể truy cập được site cấu hình vhost (dùng ip local thì vào được), còn site chính thì chạy bình thường.

  2. Thanh Chính 11 comment

    Cảm ơn bài chia sẻ của Admin.
    Mình làm theo thì bị lỗi như sau .
    Hiện tại trên server của mình có cài 1 web với domain là example1.vn và có sử dụng ssl
    Mình add thêm 1 web với domain là example2.vn cũng sử dụng ssl thì gõ vào domain example2.vn trên trình duyệt toàn bị redirect về domain example1.vn
    Không biết mình có cấu hình sai chỗ nào không mong bạn trợ giúp. Mình đang dùng webservice là apache chạy centos 7 nhé.
    FIle vitualhost như sau

    ServerName http://www.example2.vn
    ServerAlias example2.vn
    DocumentRoot /var/www/html/example2/

    Options -Indexes +FollowSymLinks
    AllowOverride All

    SSLEngine On
    SSLCertificateFile /etc/httpd/ssl/example2.crt
    SSLCertificateKeyFile /etc/httpd/ssl/example2.key
    ServerName http://www.example2.vn
    DocumentRoot /var/www/html/example2/

    Options -Indexes +FollowSymLinks
    AllowOverride All

    .

  3. Minh Le 1 comment

    Hi Admin,

    hiện tại mình có 1 site host tren Linux server tai Office luon, minh map port cho nó ra ngoai và Point tên miền ( A Record ) về IP WAN của office.
    ten miền publish cua minh la training.gbc-engineers.com va trong local network cua office minh co 1 cai name cho server do la moodle.gbcvn2.local . nhung khi gõ training.gbc-engineers.com thi no cứ ra cai address moodle.gbcvn2.local . ngay cả khi dùng 4GB ( bên ngoài network office ) và IP Wan no cũng cứ ra cái address ấy.

    minh co 2 file host,

    ServerAdmin moodle@gbc-engineers.com
    ServerName moodle.gbcvn2.local
    DocumentRoot /var/www/moodle

    ErrorLog “/var/log/httpd/moodle.error.log”
    CustomLog “/var/log/httpd/moodle.log” combined

    /var/www/moodle>
    AllowOverride None
    Require all granted

    File 2:

    ServerAdmin training@gbc-engineers.com
    ServerName training.gbc-engineers.com
    DocumentRoot /var/www/moodle

    ErrorLog “/var/log/httpd/moodle.error.log”
    CustomLog “/var/log/httpd/moodle.log” combined

    /var/www/moodle>
    AllowOverride None
    Require all granted

    ngay khi xóa file Host 1 , restart server no vẫn vậy

  4. Hue Nguyen 22 comment

    Mình đang chạy 1 web rồi nên k rõ có lỗi khi tạo folder như cách làm virtual host bt k đó.
    Còn cách tạo nhiều domain với virtual khi mới cài vps m cg hiểu.

  5. Hue Nguyen 22 comment

    Hi bạn,
    Hiện mình đang dùng một domain và chứa ở thư mục:
    var/www/html/
    Vì mình không tạo virtual để cài nhiều domain từ đầu.
    Nên mình có tạo thêm subdomain hoặc dùng một domain khác thì có làm theo guide này được không bạn?

    Cảm ơn bạn

    1. Việt Phương Moderator

      Được bạn nhé. Mỗi domain bạn dùng 1 thư mục website và 1 file cấu hình Virtual Hosts

      1. Hue Nguyen 22 comment

        Vậy domain chính mình đang để ở root là /var/www/html/ cần di chuyển vào 1 folder à bạn ?
        Tại mình không chia thư mục ngay từ đầu.

        1. Việt Phương Moderator

          Bạn để folder nào cũng đc, khác là được
          Ví dụ trong bài viết mình hướng dẫn là /var/www/example.com/public_html đó. Chú ý gán quyền cho thư mục

  6. cuong 2 comment

    AD cho em hỏi chút. Sao em không truy cập web từ máy tính khác bằng ipv6 được nhỉ, trong khi đó em truy cập trên chính máy centos thì lại được. em không cài firewall gì cả