Setup Nginx + PHP-FPM untuk Laravel
Setup Nginx + PHP-FPM untuk Laravel bertujuan agar domain publik bisa menjalankan aplikasi Laravel dengan benar. Jawaban cepatnya: arahkan root Nginx ke folder public, gunakan try_files ke index.php, hubungkan request PHP ke socket PHP-FPM, blokir file tersembunyi, lalu reload Nginx dan PHP-FPM.
Kesalahan paling umum saat pemula deploy Laravel adalah menganggap Nginx hanya perlu diarahkan ke folder project. Di Laravel, entry point aplikasi ada di public/index.php, sehingga folder public harus menjadi document root.
Peran Nginx dan PHP-FPM
Nginx dan PHP-FPM punya tugas berbeda:
Alurnya:
Nginx tidak menjalankan PHP sendiri. Nginx meneruskan file PHP ke PHP-FPM melalui socket atau port.
Struktur Project yang Benar
Misalnya project berada di:
Maka document root Nginx harus:
Isi folder utama seperti .env, vendor, storage, dan app tidak boleh menjadi document root publik.
Konfigurasi Nginx Laravel
Buat file konfigurasi, misalnya:
Isi contoh minimal:
Aktifkan site:
sudo nginx -t penting karena Nginx akan menolak reload jika konfigurasi salah. Baca pesan error barisnya, lalu perbaiki file konfigurasi.
Menentukan Socket PHP-FPM
Bagian ini harus cocok dengan versi PHP di server:
Cek socket yang tersedia:
Contoh output:
Kalau server memakai PHP 8.2, gunakan php8.2-fpm.sock. Kalau socket salah, Nginx biasanya mengembalikan 502 Bad Gateway.
Permission untuk Laravel
Setelah Nginx dan PHP-FPM benar, Laravel tetap butuh permission menulis ke folder tertentu:
Kalau permission salah, error bisa muncul saat Laravel menulis log, cache, session, atau compiled view.
Untuk upload file Laravel, permission saja belum cukup. File publik juga butuh symlink dari public/storage ke storage/app/public. Jika gambar upload menjadi 404 di server, baca Storage Link Laravel Tidak Jalan di Server.
Cek Log Saat Error
Saat halaman error, cek log dari dua sisi:
Nginx log membantu menemukan masalah konfigurasi web server. Laravel log membantu menemukan error aplikasi seperti route, database, view, atau permission.
Contoh Masalah dan Diagnosis
404 untuk Semua Route Kecuali Homepage
Biasanya try_files belum benar. Pastikan ada:
Laravel butuh fallback ke index.php agar route seperti /produk/1 masuk ke router Laravel.
502 Bad Gateway
Biasanya Nginx tidak bisa menghubungi PHP-FPM. Cek:
Lalu samakan fastcgi_pass dengan socket yang tersedia.
File .env Bisa Diakses dari Browser
Ini tanda document root salah. Pastikan root mengarah ke folder public, bukan folder utama project.
Kesalahan yang Sering Terjadi
Root Nginx Salah
Ini kesalahan paling berbahaya. Gunakan:
Bukan:
Socket PHP-FPM Tidak Cocok
Jika server punya PHP 8.2 tetapi konfigurasi menunjuk PHP 8.3, request PHP akan gagal.
Lupa Reload Service
Setelah mengubah konfigurasi, jalankan:
Mengatasi Semua Error dengan chmod 777
chmod 777 membuat folder bisa ditulis siapa saja. Lebih baik atur owner dan group dengan benar.
Pencegahan
- Simpan konfigurasi Nginx yang sudah benar sebagai template.
- Selalu jalankan
nginx -tsebelum reload. - Catat versi PHP-FPM yang dipakai.
- Pastikan
APP_URLsesuai domain production. - Cek log Nginx dan Laravel sebelum menebak.
- Setelah ubah
.env, bersihkan dan buat ulang cache config Laravel.
Bacaan Terkait
- Cara Deploy Laravel ke VPS
- Setup Supervisor untuk Queue Laravel
- Cara Menjalankan Scheduler Laravel di Production
- Laravel
.envProduction: Checklist Aman - Storage Link Laravel Tidak Jalan di Server
- Pengenalan Laravel
FAQ
Kenapa Laravel harus diarahkan ke folder public?
Karena public/index.php adalah entry point Laravel. Folder utama project berisi file internal yang tidak boleh diakses langsung dari browser.
Apa penyebab 502 Bad Gateway?
Paling sering karena PHP-FPM mati, socket PHP-FPM salah, atau permission socket tidak bisa diakses Nginx.
Kenapa route Laravel 404 di server?
Biasanya konfigurasi try_files belum mengarah ke /index.php?$query_string, sehingga route tidak diteruskan ke Laravel.
Apakah konfigurasi ini cukup untuk HTTPS?
Belum. Konfigurasi di atas melayani HTTP. Untuk HTTPS, tambahkan sertifikat TLS, misalnya dengan Certbot atau mekanisme dari provider server.
Apakah perlu restart Nginx setiap deploy?
Tidak selalu. Reload Nginx hanya perlu jika konfigurasi Nginx berubah. Untuk perubahan kode Laravel, biasanya cukup update code, install dependency, migrate, build asset, dan bersihkan/optimasi cache.