Thông thường mỗi VPS mình chỉ chạy cho một website mà thôi, tuy nhiên trong trường hợp bạn có nhiều website và muốn add thêm chạy trên VPS thì sao, hãy tham khảo bài hướng dẫn này để thực hiện.

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

Theo như nginx website, Virtual Hosts được gọi là Server Blocks trên nginx, tuy nhiên cho dễ dàng giống như Apache nên mình sẽ gọi là Virtual Hosts trong bài này. Các bước add thêm website trên VPS nginx chạy CentOS bằng Virtual Hosts như sau:

Chuẩn bị server

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

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

Ví dụ mình sẽ tạo thư mục ở folder /home/ nhé. Thay example.com bằng domain của bạn.

mkdir -p /home/example.com/public_html

Gán quyền

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

chown -R nginx:nginx /home/example.com/public_html

Cài đặt Virtual Hosts

Thêm file cấu hình .conf cho domain mới

nano /etc/nginx/conf.d/example.com.conf

Sử dụng đoạn code sau:

#
# example.com configuration
#
server {
    listen       80;
    server_name example.com;

    location / {
        root   /home/example.com/public_html;
        index index.php  index.html index.htm;
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /home/example.com/public_html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /home/example.com/public_html;
    }

    # pass the PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        root           /home/example.com/public_html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

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

Reload Nginx

service nginx reload

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é.

nano /home/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 trên

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

Comment của bạn

Your email address will not be published. Required fields are marked *

141 Comments

  1. Tien 1 comment

    Chào Luân Trần!
    AD giúp mình xíu, mình chạy tối ưu hocvps rồi, bây giờ mình muốn làm thêm một website trong hocvps luôn, mình có chọn thêm website sau đó đã upload và nhấn phân quyền nhưng
    Ở web 1 : địa chỉ ip mình là 34.32.90.2xx thì mình trỏ về cloudfire ip đó
    Vậy ở web 2 mình trỏ ip như thế nào, nếu trỏ ip trên chắc nó lại về trang 1.

    1. Luân Trần Admin

      Bạn vẫn trỏ về IP VPS nhé, hệ thống tự động phân biệt được mà 😛

      1. NGUYEN THANH CHINH 10 comment

        sao e trỏ về vps thì nó cứ nhảy qua domain đầu tiên anh nhỉ?

      2. NGUYEN THANH CHINH 10 comment

        [root@MAYAPTRUNG home]# nginx -t
        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful
        [root@MAYAPTRUNG home]#

        1. Việt Phương Moderator

          1. Bạn restart được Nginx bình thường không
          2. Bạn dùng hệ quản trị nào
          3. Bạn có dùng Varnish không? (hoặc config gì Nginx làm reserve proxy)

          1. Việt Phương Moderator

            Bạn dùng hệ quản trị nào? Và bạn add theo phương pháp nào? Bạn gửi toàn bộ nội dung các Nginx conf qua mình mới xem đc cấu hình đúng không. Paste qua https://pastebin.com/ cho gọn

          2. NGUYEN THANH CHINH 10 comment

            e dùng Hocvps
            Lấy nội dung các nigx kiểu gì anh bảo e vs 😀

          3. Việt Phương Moderator

            Nếu HocVPS thì bạn thêm website bằng menu hocvps chứ? Bạn copy nội dung các file trong /etc/nginx/conf.d ra

          4. Việt Phương Moderator

            Tự động đâu bạn? nguyenanhchinh.com bạn thêm thủ công mà? Bạn thêm bằng menu 2 của HocVPS ý. Các hệ quản trị đều có menu để thêm domain sẵn. Chứ việc thêm như bài viết này chỉ dành cho hệ thống tự thiết lập hoàn toàn
            Bên cạnh đó, nguyenanhchinh.com nội dung khác mà http://prntscr.com/gb4uip

          5. NGUYEN THANH CHINH 10 comment

            Vậy là vào hocvps thêm domain cái là đc à anh. k cần phải chỉnh sửa file conf nữa phải không anh

            Nãy e thêm ntnay: e gõ : hocvps
            ấn phím 2 thêm domain
            rồi em sửa file conf

          6. Việt Phương Moderator

            Thêm bằng menu hocvps là đúng chuẩn hệ thống HocVPS luôn. Mình có note trong bài viết rồi mà

  2. Thành 2 comment

    bạn ơi cho mình hỏi mình dùng hocvps để tạo thêm site mới mà cái site mới cứ trỏ về site đầu tiên của mình, mình đã reset nginx nhiều lần mà ko có kết quả, tks bạn

      1. Luân Trần Admin

        Gửi thông tin domain với SSH vào mail mình check coi, chắc bạn chưa dùng quen ấy mà

        1. Andy 15 comment

          Luân ơi!
          Mình củng bị giống như bạn này vậy!
          Phải làm sao đây luân

          Giúp giúp!

          Cám ơn

          1. Việt Phương Moderator

            nginx -t của bạn ra kết quả gì? Và bạn dùng hệ quản trị nào? Bạn add website theo cách nào?

  3. vannguyen 26 comment

    Nếu mình đã cài hocvps thì không cần làm theo bài này mà vào luôn hocvps để cài phải ko bạn, mình chưa hiểu

    1. Việt Phương Moderator

      Đúng rồi bạn. Nếu bạn sử dụng HocVPS Script thì chỉ cần gõ hocvps rồi chọn menu 2 là thêm được website rồi. Script sẽ làm tự động cho bạn

  4. Dang 10 comment

    Em dùng hocvps add thêm 2 web với tên miền là ltkphotography.ga và tiemnam.ga nó lại trỏ về web vuhuudang.com. Tất cả cùng 1 VPS. Khắc phụ như nào ạ?

    1. Việt Phương Moderator

      Nginx đang không khởi động lại được nên cấu hình nginx cũ vẫn lưu. Bạn chạy nginx -t ra lỗi gì

      1. Dang 10 comment

        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: [emerg] open() “/home/tiemnam.tk/logs/access.log” failed (2: No such file or directory)
        nginx: configuration file /etc/nginx/nginx.conf test failed

        1. Việt Phương Moderator

          Hình như bạn xóa website tiemnam.tk nhưng chưa xóa nginx conf của web đó trong /etc/nginx/conf.? Hoặc bạn copy conf đó từ VPS khác vào chưa sửa? Nếu đúng thế thì bạn xóa file ý đi là đc.

  5. Trần Anh Đức 13 comment

    add ơi, em làm theo hướng dẫn vào add tên miền anhducpc.top vào rồi khởi động lại nginx chạy tên miền thì nó ko ra cái trang html mình tạo test mà cứ ra trang welcome nignx ban đầu.

    nginx -t thì nó báo thế này

    nginx: [warn] conflicting server name “anhducpc.top” on 0.0.0.0:80, ignored
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

    1. Việt Phương Moderator

      Trong thư mục gốc của web có các file nào html
      Và bên cạnh đó bạn khai báo trùng port 80 của anhducpc.top rồi. Có thể trong thư mục Nginx của bạn có 2 file cùng cấu hình anhducpc.top ?

      1. Trần Anh Đức 13 comment

        Anh ơi em cấu hình cho nó chạy được rồi ạ. Nhưng mà khi em cài laravel thì vẫn lỗi cũ ngày xưa em ko làm thế nào chạy được cả. Không biết để chạy laravel thì phải cấu hình nginx như thế nào vậy ạ.

        1. Việt Phương Moderator

          Bạn cài Laravel xong thì phải cấu hình để Nginx web nhận thư muc Laravel
          Ví dụ như bài này, mình hướng dẫn cài đặt Laravel vào trong public_html của web

          1. Trần Anh Đức 13 comment

            vậy cấu hình cho nó nhận thư mục laravel như thế nào ạ.

          2. Trần Anh Đức 13 comment

            Dạ em làm nhiều lần rồi mà ko được. Em gửi tài khoản cho anh anh xem giúp em được ko ạ.

  6. Quoc 5 comment

    Mình cài xong HocVPS vào HocVPS Script Admin nhưng tìm mãi ko thấy chỗ nào thêm website? Các bác cho hỏi phải vào chỗ nào mới thêm dc vậy?

  7. khanhtran 10 comment

    A luân cho e hỏi, e cài wp bằng hocvps, giờ e muốn tạo nhìu subdomain trỏ về vps .
    E trỏ xong thì chỉ vào được dạng 1.abc.com ở index.
    Còn khi vào trang quảng trị wp-admin thì nó lại vào bằng domain chính abc.com và ở bài viết củng vậy.
    A Luân có cách nào khắc phục ko vậy ạ?

    1. Việt Phương Moderator

      Bạn tạo subdomain bằng WP Multisite dạng subdomain? Nếu thế bạn đưa mình cấu hình Nginx Conf của domain mình thêm phần WP Multisite cho(paste qua http://pastebin.com/ cho gọn). Ngoài ra bạn tạo sub/wildcard subdomain ở quản lý domain trỏ về VPS hết chưa?

  8. Hùng 12 comment

    Mình cài Hocvps và thêm site thì không site nào chạy hết, đã trỏ nameserver về Vultr và có cái trỏ thẳng IP của VPS cũng không được. Là bị gì nhỉ
    trỏ IP đã chạy, còn trỏ nameserver không chạy nhỉ

    1. Việt Phương Moderator

      Trỏ thẳng domain về IP VPS bạn ơi. Nếu bạn dùng Nameserver trung gian(ví dụ Cloudfare, Vultr) thì bạn phải vào trong Nameserver cấu hình

  9. longcheng 2 comment

    Mình có dùng hocvps để cài vps của mình. Mình add thêm các website(dùng hocvps menu để add) thì được nhưng không hiểu vì sao từ wbesite thứ 5 trở đi thì không được. Nó tự động redirect về web đầu tiên khi mình cài vps. Mình có làm theo các hướng dẫn trên vẫn không được.
    Mong ad hỗ trợ giúp mình với. Thanks

    1. Việt Phương Moderator

      Có thể 2 trường hợp
      1. Website thứ 5 bạn add không thành công. Tức VPS chưa nhận nó. Mọi website chưa được webserver nhận thì dù trỏ về ip VPS cũng sẽ chỉ show nội dung của website đầu tiên(mặc định)
      2. Nginx có vấn đề nên dù add thành công nhưng webserver Nginx không khởi động lại được để nhận
      Bạn nginx -tservice nginx reload ra kết quả gì

      1. longcheng 2 comment

        => nginx -t
        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: [emerg] open() “/home/1/logs/access.log” failed (2: No such file or direc tory)
        nginx: configuration file /etc/nginx/nginx.conf test failed

        => service nginx reload
        Redirecting to /bin/systemctl reload nginx.service

        Với 2 câu lệnh trên thì nó có 2 thông báo như vậy bạn.
        Thanks

        1. Việt Phương Moderator

          Bạn tạo domain là 1 bằng hocvps menu nhưng xóa lại thủ công, không bằng hocvps menu nên xóa không hết.
          Bạn xóa Nginx conf của domain 1 đi. rm -rf /etc/nginx/conf.d/1.conf

  10. đức 31 comment

    a cho e hỏi là e đã cấu hình thành công 1 domain mới rồi ví dụ abc.com

    vậy nếu e sử dụng web kiểu folder con abc.com/folder1 thì có cần cấu hình cái folder đó nữa ko hay nó tự chạy ạ?

    vì e làm thì cái folder đó vào đc home nhưng ấn bài viết thì die link ạ
    http://ducmu.info/blog/

  11. Hoàng 4 comment

    Mình có cái hocvps, sau đó trỏ ip vào vào thêm website khi truy cập nó báo lỗi này:

    403 Forbidden, Lỗi dns, nếu tên miền mới cập nhật ip vui lòng đợi trong giây lát.

    Không biết là nó bị cấm ở chỗ nào

    1. Việt Phương Moderator

      Bạn thêm 1 website mới và không có upload source web gì bên trong đúng không? Vậy bạn ping domain có trỏ về IP VPS chưa

  12. VI PHAM HONG 34 comment

    thế làm sao để nó chạy trên các ip khác nhau.. í là mình mua thêm ip cho vps… mỗi website chạy mỗi ip

    1. Việt Phương Moderator

      Bạn cài đặt IP vào VPS rồi mỗi website trỏ về 1 IP là được

      1. VI PHAM HONG 34 comment

        thế lúc mình cài example.com đó nó tự động nhận ip mới à… mông lung quá 🙁

        1. Việt Phương Moderator

          Nó nhận IP nào là do bạn trỏ ở DNS. Còn tất cả các IP đó đều là kết nối của VPS đó, dạng như thay vì truy cập VPS bằng IP A bạn có thể truy cập bằng IP B C D E

  13. Manh Doan 19 comment

    Mình trỏ web về vps nhưng từ web thứ 3 thì chỉ show ra nội dung web đầu tiên. Không biết sửa như thế nào bạn nhỉ?

    1. Việt Phương Moderator

      service nginx statusnginx -t của bạn kết quả gì. Đồng thời paste nội dung các Nginx Conf của bạn ra

      1. Manh Doan 19 comment

        mình gửi bạn kết quả: [root@vultr home]# service nginx status
        Redirecting to /bin/systemctl status nginx.service
        ● nginx.service – nginx – high performance web server
        Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
        Active: active (running) since Mon 2017-07-24 14:15:01 +07; 4 days ago
        Docs: http://nginx.org/en/docs/
        Process: 9920 ExecReload=/bin/kill -s HUP $MAINPID (code=exited, status=0/SUCCESS)
        Main PID: 795 (nginx)
        CGroup: /system.slice/nginx.service
        ├─ 795 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
        └─6167 nginx: worker process

        Jul 24 14:36:27 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 24 22:28:59 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 25 20:14:48 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 26 11:47:19 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 26 14:39:06 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 26 16:19:43 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 26 18:27:03 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 28 12:19:48 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 28 13:56:42 vultr.guest systemd[1]: Reloaded nginx – high performance web server.
        Jul 28 14:00:54 vultr.guest systemd[1]: Reloaded nginx – high performance web server.

        [root@vultr home]# nginx -t
        nginx: [emerg] “real_ip_header” directive is duplicate in /etc/nginx/nginx.conf:74
        nginx: configuration file /etc/nginx/nginx.conf test failed

        file nginx.conf mình paste qua đây https://pastebin.com/6hfMicdw

  14. Manh Doan 19 comment

    bạn ơi mình chạy lệnh nginx -t thì ok rồi.
    Nhưng còn vụ tên miền trỏ về VPS cứ tự động ra trang đầu tiên thì ntn nhỉ? Mình tạo record DNS các kiểu như các trang web trước luôn

    1. Việt Phương Moderator

      Ý bạn là redirect về a21tours.com ? Nếu thế bạn kiểm tra source code có để redirect nhầm không? Và cho mình toàn bộ nội dung của toàn bộ các Nginx Conf trong server
      Thường bị khi Nginx không thể khởi động lại –> Không nhận cấu hình mới. Nhưng case bạn là khởi độgn lại thành công

        1. Việt Phương Moderator

          Haizzz. Nếu bạn dùng HocVPs Script thì add website bằng hocvps menu ý, đừng add thủ công. Hiện mình thấy hệ thống bạn bình thường mà. Server_name nào thì show root ý. Và Nginx restart được bình thường đúng k

          1. Manh Doan 19 comment

            hi hi, mình ko biết chỗ add website bằng hocvps mennu ấy, toàn add tay 😀
            Sever_name của mình là a21travel bạn ạ,

          2. Manh Doan 19 comment

            à mình tìm đc chỗ add domain bằng hocvps rồi, nhanh kinh 😀 bạn ơi xem hộ mình sao ấy cái domain thêm mới nó toàn redirect về trang a21tours.com thôi.
            Mình định test cái web, giờ lại deploy cái Vps khác cài lại thì hơi ngại, muốn add luôn vào Vps cho tiện

          3. Việt Phương Moderator

            Bạn dùng Varnish thì phải cấu hình đúng cả Varnish và toàn bộ các website nhé. Website mới add thêm cũng phải cấu hình theo port mới chứ không đc phép dùng 80 (vì Varnish đã dùng 80). Nếu không, các server_name sẽ không đc nhận và chỉ show ra nội dung default_server(là website cài HocVPS ban đầu)

  15. Linh 7 comment

    Sau khi thêm domain thứ 2, truy cập vẫn hiển thị nội dung của domain thứ 1. Lỗi này khắc phục thế nào các bác?

    1. Việt Phương Moderator

      Bạn kiểm tra Nginx Webserver có hoạt động bình thường không? nginx -t Và ngoài ra, bạn có dùng Varnish không?

      1. Linh 7 comment

        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful

        Mình không dùng Varnish bạn ạ!

        1. Việt Phương Moderator

          Webserver ok mà bạn lại không dùng Varnish. Bạn thử restart Nginx xem có bình thường không? Và bạn cho mình nội dung Nginx Conf của cả 2 domain nhé

          1. Linh 7 comment

            Tại sao lại có 2 Nginx Conf của cả 2 domain hả bạn? Mình chưa hiểu cái này. Domain thứ 2 phải tạo Nginx Conf riêng à?

          2. Việt Phương Moderator

            Để dễ quản lý thôi. Mỗi site đã ít nhất 1 block server rồi. Bạn có thể để 100 block server trong 1 file rồi tìm hay bạn sẽ để 100 file cho dễ quản lý?

  16. Thuấn 3 comment

    sau khi add tên miền trên hocvps Script xong, truy cập web nó thông báo như thế này
    Welcome to nginx!

    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.

    Thank you for using nginx.

    Tiếp theo nên làm gì ad?

        1. Việt Phương Moderator

          Thì bạn upload lên thư mục web qua sFTP/dùng SSH tải trực tiếp về. Bạn tham khảo thêm trên mạng có nhiều bài hướng dẫn trực tiếp bằng hinh ảnh/video. Do kiến thức này là cơ bản tối thiểu, bạn nên biết để sử dụng tốt website nhé.

  17. hong vi 34 comment

    Làm thế nào để mỗi website chạy 1 ip riêng hả admin.. mình muốn làm website vệ tinh!

    1. Việt Phương Moderator

      Bạn dùng IP Alias để thêm IP Addon vào VPS. Tùy nhà cung cấp sẽ có hướng dẫn riêng của họ. Khi đó, bạn truy cập X IP vào cùng 1 VPS đều được

  18. Jacob 11 comment

    Chào bạn,
    Mình dùng hocvps phần Add Domain cũng dành cho sub-domain như sub.domain.com đúng không bạn?
    Sau đó chỉ cần trỏ về IP của VPS (Vultr) phải không bạn?
    Bạn hướng dẫn giúp mình nhé.
    Cảm ơn bạn!

    1. Việt Phương Moderator

      Uhm, bạn add như domain bình thường nhé, trong trường hợp sub-domain hoạt động như website độc lập

      1. Jacob 11 comment

        Bạn cho hỏi sau đó mình cần cấu hình tên miền như nào để vps nhận cả domain chính và phụ ?
        Và cho mình xin hướng dẫn phân quyền webserver được không?
        Cảm ơn bạn

        1. Việt Phương Moderator

          Menu HocVPS 14)Phan Quyen Webserver nhé bạn
          Còn cấu hình tên miền thì bạn cứ trỏ A Record về VPS thôi

          1. Jacob 11 comment

            Ok bạn, vậy sub.domain không cần trỏ cname à bạn?
            Thanks

          2. Jacob 11 comment

            Mà bình thường mình hay trỏ về dns của vps.
            Hiện tại thì mình đang trỏ tên miền chính về trang landingpage trên Hawkhost.
            Giờ mình muốn trỏ sub domain về vps thì cài đặt trong Dns Editor của Cpanel phải không bạn?

          3. Việt Phương Moderator

            Mình không rõ vấn đề Hawkhost. Chỗ nào quản lý domain thì bạn trỏ về IP VPS thôi. Cái nào cần chạy trên VPS thì trỏ cái đó về. Domain chạy thì trỏ domain, sub chạy thì trỏ sub

  19. Le Nguyen 1 comment

    Cho mình hỏi nếu muốn dùng cả 2 domain và sub domain ở vps thì sau khi add ở hocvps và dns trên Vultr thì mình cần thêm record A và Cname như nào ạ?
    Vd: domain.com và app.domain.com
    Domain đang dùng name server ở Namecheap.
    Bạn chỉ giúp mình với nhé.

    1. Việt Phương Moderator

      Bạn tạo A Record của domain và subdomain và trỏ cả 2 về IP VPS nhé