Konfigurasi Apache dan PHP (php-cgi) di Linux (No XAMPP)

Pada kesempatan ini saya akan berbagi beberapa langkah yang saya lakukan agar web server Apache bisa bekerja dengan PHP. Cara ini saya tujukan khusus untuk memudahkan web development di PC / laptop.

apache php-cgi

Untuk bisa menggunakan PHP, di Apache ada dua cara. Yaitu menggunakan PHP sebagai modul Apache, atau sebagai binary CGI.

Di beberapa artikel banyak yang menggunakan php-fpm, yaitu sebuah wrapper CGI/FastCGI. Tetapi kali ini kita akan menggunakan php-cgi. Tidak seperti php-fpm, kita tidak perlu menjalankannya secara manual. Hanya perlu menjalankan Apache saja, otomatis bisa menggunakan PHP. Walaupun sebenarnya php-cgi juga bisa dibuatkan wrapper sendiri agar bisa berjalan di background layaknya php-fpm. Terutama untuk web server yang tidak bisa spawn proses FastCGI seperti NGINX. (Baca: Konfigurasi NGINX dan PHP Error "No input file specified.").

Konfigurasi Apache berikut akan membuat interpreter PHP yaitu php-cgi hanya dipanggil saat diperlukan (tidak perlu jalan di background). Maka jika kita mengedit konfigurasi PHP nantinya akan langsung diterapkan. Tidak perlu me-restart daemon.

Sebelum melakukan konfigurasi, saya asumsikan apache dan php-cgi sudah terpasang di Linux. Silahkan cari informasi mengenai paket apache dan php-cgi karena setiap distro namanya bisa berbeda.

Tahap pertama harus memastikan Apache bisa berjalan dengan normal.

Silahkan buka /etc/apache/httpd.conf, setidaknya cek DocumentRoot, Listen portnya dan ServerName.

Lalu kita mulai atur ScriptAlias yang standarnya semacam ini:

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

Pada path sebelah kanan perlu diubah agar mengarah ke directory dimana binary php-cgi berada. Di distro yang saya gunakan ada di /usr/bin/, maka saya ubah menjadi:

  1. ScriptAlias /cgi-bin/ "/usr/bin/" 

Penting: Untuk bisa menggunakan ScriptAlias, mod_alias.so harus aktif. Bisa dicek pada bagian LoadModule. Jangan lupa modul mod_cgid.so juga harus aktif.

Lalu kita tambahkan:

  1. AddHandler php-script .php 
  2. Action php-script "/cgi-bin/php-cgi" 

* Nama handler php-script bisa diubah sembarang, malah dibeberapa artikel ada yang menamainya dengan mime-type nya yaitu application/x-httpd-php.

** /cgi-bin/ adalah sama dengan yang ada di ScriptAlias, ingat, BUKAN aliasnya atau "/usr/bin". Jika salah akan 404 Not Found ketika mengakses .php melalui browser.

*** php-cgi adalah nama file binarynya, kadang di beberapa distro ada tambahan versi PHP dibelakang, misal php-cgi7.2. Jadi, harap disesuaikan sendiri.

*** Pastikan mod_mime.so dan mod_actions.so aktif.

Langkah terakhir, agar tidak 403 Forbidden ketika mengakses .php, atur perijinan /usr/bin/ (tempat php-cgi) dan tempat file .php misal /var/www.

  1. <Directory "/usr/bin"> 
  2.     # Apache 2.4+ 
  3.     Require all granted 
  4.  
  5.     # Apache 2.2 
  6.     # Order allow,deny 
  7.     # Allow from all 
  8. </Directory> 
  9.  
  10. <Directory "/var/www"> 
  11.     # Apache 2.4+ 
  12.     Require all granted 
  13.  
  14.     # Apache 2.2 
  15.     # Order allow,deny 
  16.     # Allow from all 
  17. </Directory> 

Hal diatas diperlukan (sebagai whitelist) karena Apache standarnya "denied" di root:

  1. <Directory "/"> 
  2.     AllowOverride none 
  3.     Require all denied 
  4. </Directory> 

Selesai. Seperti itulah langkah minimal yang saya lakukan. Jika tidak bekerja dengan baik bisa dicari masalahnya, barangkali ada sedikit konflik di konfigurasinya.

#Server