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.