Episode ini membahas integrasi PHP: directive php_fastcgi, koneksi melalui Unix socket dan TCP, setup PHP-FPM, pola WordPress, Laravel, dan Symfony dengan try_files, serta optimasi OPcache dan pool FPM.

PHP masih menggerakkan sebagian besar web — WordPress, Laravel, dan ratusan framework lain. Agar PHP berjalan efisien, aplikasi berbicara ke server lewat PHP-FPM, dan web server bertindak sebagai klien FastCGI. Episode 24 membahas integrasi ini di Caddy.
Kalian akan belajar directive php_fastcgi, koneksi melalui Unix socket atau TCP, setup PHP-FPM dengan pool yang benar, pola konfigurasi untuk WordPress, Laravel, dan Symfony, serta optimasi performa dengan OPcache.
Caddy menangani PHP-FPM secara native — tidak perlu plugin atau modul tambahan. Ini salah satu keunggulan yang membuat Caddy nyaman untuk aplikasi PHP.
Directive php_fastcgi terhubung ke PHP-FPM dan mengarahkan request ke sana:
example.com {
root * /var/www
php_fastcgi unix//run/php/php-fpm.sock
file_server
}php_fastcgi unix//run/php/php-fpm.sock memakai Unix socket — koneksi tercepat karena tanpa jaringan. Caddy mengirim file PHP yang diminta ke FPM dan menampilkan hasilnya.
Jika PHP-FPM berada di host atau container lain:
example.com {
root * /var/www
php_fastcgi 127.0.0.1:9000
file_server
}php_fastcgi 127.0.0.1:9000 terhubung lewat TCP ke FPM di port 9000. Pilih TCP ketika PHP-FPM dan Caddy terpisah — misalnya di container berbeda (episode 27).
Pastikan PHP-FPM terpasang:
sudo apt install php-fpmKonfigurasi pool ada di /etc/php/*/fpm/pool.d/www.conf. Beberapa nilai penting:
user = www-data
listen = /run/php/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 20listen harus cocok dengan yang dipakai Caddy.listen.mode memberi izin baca-tulis socket.pm dan max_children mengatur jumlah proses — dibahas di bagian optimasi.Error paling umum: socket tidak bisa diakses. Pastikan user Caddy bisa membaca socket. Jika Caddy berjalan sebagai user caddy dan FPM sebagai www-data, setel listen.owner dan listen.group dengan tepat, lalu restart FPM.
WordPress butuh index index.php dan permalink yang bersih:
example.com {
root * /var/www/wordpress
php_fastcgi unix//run/php/php-fpm.sock
try_files {path} /index.php?{query}
file_server
}try_files {path} /index.php?{query} mengarahkan permalink WordPress ke index.php — pola standar untuk struktur permalink yang cantik.
Laravel dan Symfony memakai front controller:
example.com {
root * /var/www/laravel/public
php_fastcgi unix//run/php/php-fpm.sock {
env LARAVEL_ENV production
}
try_files {path} /index.php?{query}
file_server
}Kunci penting: root menunjuk ke folder public Laravel, bukan root project. php_fastcgi dengan blok bisa mengirim environment variables:
example.com {
root * /var/www/laravel/public
php_fastcgi unix//run/php/php-fpm.sock {
env APP_ENV production
env DB_HOST localhost
}
try_files {path} /index.php?{query}
file_server
}env APP_ENV production meneruskan environment variable ke proses PHP. Untuk secret, gunakan environment variable sistem yang diatur service manager, bukan ditulis di Caddyfile.
OPcache menyimpan bytecode PHP ter-compile di memori:
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 0opcache.validate_timestamps = 0 menonaktifkan pengecekan perubahan file — hanya untuk produksi, karena membutuhkan reload PHP setelah update kode. Tanpa OPcache, setiap request men-compile ulang seluruh framework.
Mode pm menentukan jumlah proses:
pm.max_children adalah batas tertinggi proses. Atur sesuai RAM: sekitar 30 hingga 50 MB per proses PHP. Jangan melebihi kapasitas memori server.
Jika halaman PHP kosong atau error 502:
sudo systemctl status php-fpm
tail -f /var/log/php-fpm.logtail -f /var/log/php-fpm.log menampilkan log error FPM secara langsung. Error 502 Gateway hampir selalu berarti Caddy tidak bisa berbicara ke FPM — cek socket, izin, dan apakah FPM berjalan.
Episode 24 membuka integrasi PHP-FPM: directive php_fastcgi dengan Unix socket atau TCP, setup pool FPM dengan izin socket yang benar, pola WordPress, Laravel, dan Symfony dengan try_files dan front controller, serta optimasi OPcache dan process management.
Inti yang harus dibawa pulang:
php_fastcgi unix//run/php/php-fpm.sock untuk koneksi lokal.public.try_files {path} /index.php?{query} untuk front controller.env di php_fastcgi meneruskan variabel ke PHP.Di episode 25 selanjutnya kita akan membahas WebSocket & real-time applications — deteksi otomatis WebSocket, reverse proxy untuk koneksi upgrade, aplikasi seperti Socket.io dan chat real-time, troubleshooting timeout, serta pertimbangan load balancer untuk koneksi yang panjang.