Menjalankan Laravel di belakang Nginx dengan PHP-FPM
Catatan konfigurasi Nginx dan PHP-FPM untuk aplikasi Laravel, termasuk perintah yang biasanya terlewat ketika situs muncul 502 Bad Gateway di produksi.
Bagian paling membingungkan ketika Laravel pertama kali dijalankan di server bukan
kodenya, melainkan menentukan siapa yang melayani file .php. Nginx tidak menjalankan
PHP sendiri — ia meneruskan request ke PHP-FPM melalui socket. Kalau keduanya tidak
sepakat soal lokasi socket, hasilnya adalah 502 Bad Gateway.
Masalahnya
Nginx dan PHP-FPM sama-sama punya file konfigurasi, dan masing-masing punya pendapat sendiri tentang socket yang dipakai. PHP-FPM cenderung dipasang dengan satu konfigurasi pool bawaan, sementara Nginx perlu tahu path yang persis sama.
Cara cepat memeriksa: lihat listen di file pool PHP-FPM.
grep -R "^listen" /etc/php/*/fpm/pool.d/www.conf
Umumnya keluar /run/php/php8.3-fpm.sock atau 127.0.0.1:9000. Keduanya sah, tetapi
Nginx harus memakai salah satu yang sama.
Konfigurasi Nginx
server {
listen 80;
server_name contoh.test;
root /var/www/contoh/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Dua baris yang paling sering salah:
rootharus menunjuk folderpublic, bukan folder proyek.SCRIPT_FILENAMEmemakai$realpath_root, bukan$document_root. Perbedaannya baru terasa kalau folder proyek mengandung symlink.
Urutan pemeriksaan
Kalau tetap muncul 502, cek berurutan — jangan lompat:
- Apakah PHP-FPM berjalan?
systemctl status php8.3-fpm - Apakah socket benar-benar ada?
ls -l /run/php/ - Apakah path
rootdi Nginx valid?nginx -t - Apakah
public/index.phpbisa diakses userwww-data?
Langkah keempat sering terlewat. Sistem Linux dengan AppArmor aktif dapat menolak
www-data membaca folder proyek walaupun permission Unix sudah benar.
Yang bisa dicoba
Kalau kamu punya aplikasi Laravel yang belum pernah dijalankan di server, pasang Nginx dan PHP-FPM di mesin percobaan dulu, lalu jalankan urutan di atas tanpa menambah konfigurasi lain. Begitu halaman kosong Laravel tampil, barulah tambahkan konfigurasi demi konfigurasi. Memasang semuanya sekaligus membuat sumber masalahnya tidak terlacak.