Troubleshooting Error Connection refused pada FastCGI di Apache
Pendahuluan
Ketika Apache gagal terhubung ke backend FastCGI, kamu mungkin akan melihat error seperti ini di log:
[proxy:error] [pid 30777:tid 30891] (111)Connection refused: AH02454: FCGI: attempt to connect to Unix domain socket /tmp/php-cgi-56.sock (localhost:8000) failed
[proxy_fcgi:error] [pid 30777:tid 30891] [client 192.168.122.2:59320] AH01079: failed to make connection to backend: localhost
Kita akan ulas:
☐ Penyebab error
☐ Mengatasi error
Apa Penyebabnya?
Error tersebut mungkin bisa terjadi karena salah satu atau beberapa hal berikut:
- PHP FastCGI tidak berjalan
- Socket file hilang atau punya izin yang salah
- Konfigurasi Apache atau FastCGI salah
- Port FastCGI tidak aktif atau konflik dengan proses lain
- Apache atau PHP-FPM crash setelah update atau perubahan sistem
Solusi yang Dapat Dilakukan
1. Coba Restart PHP FPM
Cek apakah PHP FastCGI (PHP-FPM) sedang berjalan:
ps aux | grep php
Jika tidak ada proses PHP-FPM yang berjalan, restart layanan PHP-FPM:
systemctl restart php-fpm
Atau, jika versi tertentu yang tidak berjalan, sesuaikan misalnya untuk PHP 5.6.
systemctl restart php5.6-fpm
Jika menjalankan PHP di dalam Docker tanpa --privileged
, maka systemd
tidak bisa berjalan di dalam container sehingga akan memberikan pesan error Failed to get D-Bus connection: Operation not permitted
.
Gunakan perintah service
:
service php5.6 restart
Atau jika menggunakan supervisor di aapanel, coba restart layanan PHP melalui panel atau dengan perintah:
supervisorctl restart php5.6-fpm
Jika perintah service
tidak ditemukan dan tidak menggunakan supervisor, coba gunakan perintah berikut:
/etc/init.d/php5.6-fpm restart
Bila masih gagal, coba cek isi /etc/init.d/
, barangkali service tersebut menggunakan nama berbeda.
ls /etc/init.d/
# Misalnya, muncul output seperti berikut:
# README bt httpd mysqld php-fpm-56 php-fpm-74 pure-ftpd
# Berarti, nama service php-fpm-56 berbeda dari default (php5.6-fpm)
# Oleh karenanya, untuk restart service jalankan:
/etc/init.d/php-fpm-56 restart
Cek kembali statusnya:
systemctl status php5.6-fpm # Pakai ini
service php5.6-fpm restart # Atau pakai ini
supervisorctl status php5.6-fpm # Atau pakai ini
/etc/init.d/php5.6-fpm restart # Atau pakai ini
/etc/init.d/php-fpm-56 restart # Atau pakai ini
Jika statusnya gagal, lihat log error PHP-FPM:
tail -f /var/log/php5.6-fpm.log # Atau sesuaikan dengan lokasi file log
2️. Periksa File Socket
Cek apakah file socket tersedia:
ls -lah /tmp/php-cgi-56.sock
Jika tidak ada, coba restart PHP-FPM seperti langkah pertama. Jika ada tetapi izinnya salah, atur ulang:
chmod 666 /tmp/php-cgi-56.sock
chown www-data:www-data /tmp/php-cgi-56.sock
Tambahan: Pastikan path socket dalam konfigurasi PHP-FPM sesuai dengan konfigurasi Apache.
3️. Cek Konfigurasi Apache
Pastikan konfigurasi Apache untuk FastCGI benar. File konfigurasi biasanya ada di:
/etc/apache2/sites-available/
/etc/apache2/conf-available/
Cek bagian ini dalam konfigurasi:
<IfModule proxy_fcgi_module>
<FilesMatch "\.php$">
SetHandler "proxy:unix:/tmp/php-cgi-56.sock|fcgi://localhost"
</FilesMatch>
</IfModule>
Jika menggunakan port, pastikan seperti ini:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:8000/var/www/html/$1
Simpan perubahan dan reload Apache:
systemctl restart apache2
Tambahan: Cek apakah ada konflik port dengan perintah:
netstat -tulnp | grep 8000
Penutup
Jika error "Connection refused" pada FastCGI terjadi:
- Pastikan PHP-FPM berjalan
- Cek file socket dan izinnya
- Pastikan konfigurasi Apache benar
- Cek apakah firewall atau SELinux menghalangi koneksi
- Periksa log untuk detail error
Dengan langkah-langkah ini, Apache seharusnya bisa kembali terhubung ke PHP FastCGI dengan normal. Semoga catatan ini dapat membantu.