Cấu hình Virtual Host: myproject.dev thay vì localhost/myproject

Chào các bạn hôm nay mình sẽ chia sẻ những kiến thức mình biết về việc cấu hình để tạo một tên miền ảo, chạy trên máy tính của chúng ta với những thao tác khá đơn giản với Apache web server trên hệ điều hành Ubuntu 16.04

  • Các phần mình sẽ trình bày
    • Khái niệm
    • Cài đặt
    • Cấu hình
    • Kết luận

Khái niệm

  • Hosting là dịch vụ lưu trữ dữ và chia sẻ liệu trực tuyến, là không gian trên máy chủ có cài đặt các dịch vụ Internet như world wide web (www), truyền file (FTP), Mail… ,bạn có thể chứa nội dung trang web hay dữ liệu trên không gian đó.
  • Virtual host là phương thức đề cập tới việc chạy nhiều trang web ( vd: company1.example.com, company2.example.com ...) trên cùng một máy duy nhất.
    • Virtual host có thể dựa trên IP-based mình có nhiều địa chỉ IP khác nhau cho cùng một website ( bạn có thể mở terminal chạy lệnh "host google.com" để xem các địa chỉ IP của google ) hay có thể là Name-based nghĩa là chúng ta có nhiều tên miền chạy trên từng địa chỉ IP. Ở đây chúng ta sẽ tìm hiểu "Name-based".

Cài đặt

  • Cài đặt Apache server

      sudo apt-get update
      sudo apt-get install apache2
    
  • Sau khi cài đặt thành công apache server thì thư mục làm việc với apache mặc định là /var/www/html, giờ chúng ta cần tạo một folder chứa project demo của chúng ta ở đây mình đặt tên là myproject, sau đó tạo một file index.html trong myproject.com với nội dung đơn giản để chạy thử

      /var/www/myproject/index.html
    
    • Kết quả của mình sẽ như sau

Cấu hình

  • Các file cấu hình của apache được lưu dưới đường dẫn /etc/apache2/, bạn cũng có thể xem chi tiết hơn thông qua việc khởi động server apache và mở trình duyệt đi tới đường dẫn localhost để xem mô tả chi tiết hơn

Tạo Virtual host file

  • Việc tạo virtual host file khá đơn giản là mình sẽ copy lại một file cấu hình default của apache và sau đó custom lại nó

      sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/myproject.conf
    
  • Chỉnh sửa file vừa tạo, bạn có thể sử dụng Vim hoặc Nano, với mình sử dụng nano:

      sudo nano /etc/apache2/sites-available/myproject.conf 
    
  • Sửa nội dung như sau

    • Các option trong file .conf
      • <VirtualHost></VirtualHost> Đây là cặp thẻ báo hiệu mở đầu và kết thúc của một khai báo về Vhost
      • ServerAdmin (Không bắt buộc): khai bái địa chỉ server admin
      • DocumentRoot: Khai báo đường dẫn tới thư mục project của bạn mà sẽ được gọi tới khi bạn truy cập vào đường dẫn trong file cấu hình
      • ServerName: Tên domain mình muốn đặt
      • ErrorLog (Không bắt buộc): đường dẫn tới file chứa log khi có lỗi
    • Bạn cần chú ý ở đây là listen port 80 nhưng nếu bạn đã sửa (8080, 8000, 9000, ...) config mặc định của apache thì cần để đúng với port đó

Enable virtual host

  • Enable virtual host

      sudo a2ensite myproject.conf
    
    • Sau khi lệnh này được thực hiện file myproject.conf sẽ được copy từ /etc/apache2/site-available/myproject.conf sang /etc/apache2/site-enable/myproject.conf
  • Restart apache server

         sudo service apache2 restart
    

Đăng ký DNS

  • Điều khá quán trọng đó là bạn cần phải khai báo tất cả các tên miền bạn muốn dùng với Apache trong máy chủ DNS.
  • Nếu bạn chỉ khai báo thoải mái các tên khác nhau trong .conf (hay apache.conf) mà trong máy chủ DNS không hề có thông tin của các tên thì người dùng sẽ không thấy được trang web của bạn.
  • Ví dụ có một tên miền đã được đăng ký online nghĩa là sử dụng external network bạn đặt một tên như vậy thì khi truy cập vào tên miền đó request bạn gửi đi sẽ tới server online kia và trả lại trang web bạn không mong muốn, nhưng khi đăng ký DNS local thì việc sử dụng internal network khi truy cập vào tên miền của bạn nó sẽ tìm kiếm trong host local trước
  • Mở file /etc/hosts và thêm vào một dòng như sau [địa chỉ ip sẽ lắng nghe các request gửi tới] yourdomain.com(ở đây là myproject.dev) sudo nano /etc/hosts
  • Ok giờ bạn restart server apache và truy cập vào đường dẫn theo tên miền mà bạn đã config ở đây mình để là myproject.dev

Kết quả

Nếu không muốn sử dụng virtualhost hay thay đổi liên quan đến file .conf

  • Bạn chỉ cần đi tới đường dẫn chứa file .conf, và sử dụng a2dissite để disable virtual host. Nên nhớ sau mỗi lần chỉnh sửa cần restart apache2 để có sự thay đổi

      cd /etc/apache2/site-available
      sudo a2dissite `tên miền bạn muốn thay đổi`.conf
      sudo service apache2 restart
    
  • Nếu chỉ thay đổi tên miền, port listen, hay bất kỳ cấu hình nào thì khi đã hoàn thành cần enable lại file .conf và làm các bước tương tự như trên đã làm.

  • Đồng thời thay đổi hoặc xóa chỉnh sửa đối với dòng khai báo dns đã thay đổi trong /etc/hosts

Kết luận

  • Vậy là chỉ với vài thao tác đơn giản mình đã tạo được một Vhost trong có vẻ khá giống với một tên miền thật
  • Bạn có thể cấu hình một server cho riêng bạn
  • Với Apache thì không có giới hạn về số lượng domain có thể quản lý do đó ta có thể thoại mái tạo ra server để handling
  • Cảm ơn bạn đã đọc hết bài viết của mình