+3

Config Virtual Host cho project Laravel

Hẳn trong thực tế các bạn đã gặp phải trường hợp chia nhiều domain cho một trang web. Ví dụ đơn giản là trang web bán hàng "webbanhang.com" và trang admin cho web bán hàng đó "admin.webbanhang.com". Trong bài viết này, chúng ta sẽ cùng bàn luận cách để config Virtual Host cho một project Laravel tại local sử dụng Apache làm web server.

Virtual host là gì?

Virtual host là một định nghĩa chỉ chức năng nhúng nhiều tên miền vào một địa chỉ IP của một Server. Và bằng cách cài đặt riêng, Server sẽ nhận biết được tên miền nào sẽ hoạt động ở một folder nào. Điều này mang ý nghĩa rất lớn vì chúng ta không cần mỗi tên miền một địa chỉ IP mà chỉ cần một server là có thể nhúng hàng trăm tên miền cùng hoạt động.

Config Apache để sử dụng Virtual host

Chúng ta cần có apache để config 1 virtual host. Nếu bạn chưa cài apache thì có thể làm theo hướng dẫn ở link này: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04.
Một trong những khó khăn hay gặp nhất khi config project Laravel trên Apache HTTP Server là mod_writer không được enable. Laravel cần mod_writer để chuyển đổi URL sang routing của nó thông qua .htaccess
Trong một số nền tảng Ubuntu, mod_writer mặc định sẽ được enable, nhưng vì lý do bảo mật mặc định bây giờ sẽ bị disable. Để enbale mod_writer chúng ta cần chạy lệnh

sudo a2enmod rewrite
sudo service apache2 restart

Tạo virtual host

Để tạo một virtual host mới chúng ta cần tạo một file config mới, trong đó sẽ khai báo tên virtual host của chúng ta. Ở đây mình sẽ vd có 2 trang web: 1 là localdriver.local và 2 là admin.localdriver.local.
Bạn cần quyền admin để thao tác các tệp đó, vì vậy đừng quên sử dụng sudo nếu bạn không có quyền truy cập root.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/admin.localdriver.local.conf
sudo nano /etc/apache2/sites-available/admin.localdriver.local.conf

Sửa file config

File config sau khi được tạo ra sẽ như thế này.

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port t$
        # 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

Các bạn hãy sửa lại như sau:

 <VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName admin.localdriver.local
    ServerAlias www.admin.localdriver.local
    # Đây là đường dẫn đến folder project của bạn
    DocumentRoot /var/www/localdriver/public
 
    <Directory /var/www/localdriver/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
            Require all granted
    </Directory>
 
    LogLevel debug
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Thêm entry vào host

Ở trên bạn đã admin.localdriver.local là tên server. Chúng ta cần config hệ thống để khi chúng ta nhập admin.localdriver.local ở trong trình duyệt thì sẽ chuyển hướng về localhost.
Để làm điều này chúng ta cần thêm entry vào file host của máy

sudo nano /etc/hosts

Thêm dòng này vào cuối file

127.0.0.1       admin.localdriver.local

Bây giờ config đã xong, chúng ta cần kích hoạt trang web mới.

sudo a2ensite admin.localdriver.local.conf

Sau đó reload lại apache server

sudo service apache2 reload

Với trang localdriver.local thì các bạn cũng làm tương tự nhé 😄

Cài đặt project Laravel

Chuẩn bị file env

Trong file env của project hãy thay đổi APP_URL và thêm APP_ADMIN_URL như sau:

APP_URL=http://localdriver.local
APP_ADMIN_URL=http://admin.localdriver.local

Khai báo route

Chúng ta có 2 domain khác nhau nên giờ cần chia route theo domain. Ở đây mình đơn giản sẽ group các route theo domain

Route::group(['domain' => env('APP_ADMIN_URL')], function() {
    Route::get('/', function() {
        return 'Đây là trang admin';
    }
}
Route::group(['domain' => env('APP_URL')], function() {
    Route::get('/', function() {
        return 'Đây là trang người dùng';
    }
}

Chạy thử

Chúng ta đã chuẩn bị xong rồi. Bây giờ chạy thử nào


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí