Membuat Dynamic Subdomain di Laravel (Multitenant)

Laravel adalah salah satu framework PHP yang memiliki segudang fitur yang dapat digunakan sesuai kebutuhan kita, salah satunya adalah fitur yang memungkinkan laravel untuk membuat subdomain dinamis. contohnya adalah website medium yang menungkinkan membernya memiliki subdomain sesuai dengan nama yang kita pakai, contohnya https://agiksetiawan.medium.com/.

Pastikan kalian sudah menginstall laravel terlebih dahulu. disini saya akan mencontohkan di local komputer, namun bisa juga di praktekan di website production yang menggunakan domain dan hosting.

Buka settingan hosts di local komputer atau DNS management untuk yang Online. buka dan sesuaikan hosts nya

127.0.0.1 *.localhost

untuk nama localhost bisa di sesuaikan dengan nama yang lain.

Untuk Webserver saya menggunakan Nginx atau bisa juga menggunakan Apache dan di sesuaikan untuk Virtual Hostnya

untuk nginx pastikan kalian menambahkan server name dan location seperti dibawah

 server_name *.localhost;
 root /var/www/public;

dibawah ini contoh full settingan nginx

upstream php-upstream {
    server app:9000;
}
server {

    listen 80;

    server_name *.localhost;
    root /var/www/public;
    index index.php;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}


Selanjutnya kita buat routing di laravel untuk menerima subdomain dinamis

Route::domain('{account}.localhost')->group(function () {
    Route::get('/', function ($account) {
        return $account;
    });
});

kemudian coba buka browser

pada contoh gambar di mereturn value dari nama subdomain, kalian bisa sesuaikan misal dengan menambah middleware untuk mengecek account/subdomain.