CHIA SẺ:

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.

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 /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 nginx:nginx /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 nginx

sudo nano /etc/nginx/conf.d/virtual.conf

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

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

    location / {
        root   /var/www/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   /var/www/example.com/public_html;
    }

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

    # pass the PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        root           /var/www/example.com/public_html;
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

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

Restart nginx

sudo service nginx restart

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 nginx config lúc nãy sẽ tương tự như sau:

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

    location / {
        root   /var/www/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   /var/www/example.com/public_html;
    }

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

    # pass the PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        root           /var/www/example.com/public_html;
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

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

    location / {
        root   /var/www/example.net/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   /var/www/example.net/public_html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/example.net/public_html;
    }

    # pass the PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        root           /var/www/example.net/public_html;
        fastcgi_pass   unix:/tmp/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

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

69 Comments

  1. Tien 1

    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à 😛

  2. Thành 2

    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à

  3. vannguyen 12

    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

    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

        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

    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

        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

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

          2. Trần Anh Đức 13

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

Comment của bạn

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