Mengganti FCGid dengan suPHP di Running Server

Bawaan instalasi virtualmin, untuk handler php adalah menggunakan fcgid. Untuk alasan tertentu, kita perlu mengubahnya dengan suPHP, yang katanya lebih hemat memori LOL LOL LOL.

CATATAN: Server yang saya gunakan adalah Ubuntu 14.04 64 bit dengan RAM 4GB dan 3 core prosesor.

Langsung saja, begini langkah-langkahnya.

  • Login ke server dengan user biasa, lalu pindah ke root. Alasannya, karena login akun root dinonnaktifkan.
  samsul@server:~$ sudo su
  [sudo] password for samsul: 
  root@server:/home/samsul# 
  • Install beberapa paket yang diperlukan untuk mengompile kode sumber. Kenapa harus compile sendiri? bukankan sudah ada paket biner yang disediakan developer Ubuntu? Betul, tapi paket tesebut dicompile tanpa mode paranoid, sedangkan untuk keperluan server saya membutuhkan mode tersebut. Jadi harus compile manual.
  # apt-get install build-essential apache2-prefork-dev php5-cgi wget
  • Pindah ke direktori /usr/src, lalu unduh & ekstrak source code suphp,
  # cd /usr/src
  # wget -c -t 0 https://www.suphp.org/download/suphp-0.7.1.tar.gz
  # tar -xzf suphp-0.7.1.tar.gz
  • Unduh juga patch untuk suPHP versi 0.7.1,
Catatan: Versi lebih baru tersedia, yaitu 0.7.2. Namun saat saya coba sepertinya versi tersebut tidak dapat dicompile, dan belum tersedia patch-nya.
  # wget -O fix.diff https://sites.google.com/site/sudosuin/fix.diff
  • Lakukan patch
  # patch -Np1 -d suphp-0.7.1 < fix.diff
  patching file configure.ac
  patching file src/Makefile.am
  patching file src/Makefile.in
  # cd suphp-0.7.1
  • Jalankan ./configure, lengkapnya begini
  # ./configure --prefix=/usr --sysconfdir=/etc --with-apache-user=www-data --with-setid-mode=paranoid --with-apxs=/usr/bin/apxs2
  • Jalankan make untuk mulai melakukan kompilasi
  # make
  • Jika mengalamai error, jalankan perintah berikut untuk menyalin beberapa file header
  # cp /usr/include/apr-1.0/*.h /usr/include/apache2
  • Jalankan kembali make untuk melakukan kompilasi, pastikan kali ini tidak ada pesan error yang muncul
  # make
  • Jalankan make install untuk melakukan instalasi
  # make install
  • Salin berkas konfigurasi
  # cp doc/suphp.conf-example /etc/suphp.conf
  • Edit berkas konfigurasi tersebut
  # vim /etc/suphp.conf

Ganti beberapa parameter ini

  webserver_user=wwwrun

menjadi

  webserver_user=www-data

yang ini

  x-httpd-php="php:/usr/bin/php"

diganti menjadi

  application/x-httpd-suphp="php:/usr/bin/php-cgi"

ubah juga loglevel

  loglevel=info

menjadi

  loglevel=warn

Umask

  umask=0077

Menjadi

  umask=0022

Sesuaikan yang ini

  allow_file_group_writeable=true
  allow_file_others_writeable=false
  allow_directory_group_writeable=true
  allow_directory_others_writeable=false
  • Buat file suphp.load
  # vim /etc/apache2/mods-available/suphp.load

Isi dengan baris berikut, lalu simpan

  LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so
  • Buat file suphp.conf
  # vim /etc/apache2/mods-available/suphp.conf

Isi file tersebut dengan kode berikut

suphp.conf
<IfModule mod_suphp.c>
 
  AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml
  suPHP_AddHandler application/x-httpd-suphp
 
  <Directory />
    suPHP_Engine on
  </Directory>
 
# By default, disable suPHP for debian packaged web applications as files
# are owned by root and cannot be executed by suPHP because of min_uid.   
 
  <Directory /usr/share>
    suPHP_Engine off   
  </Directory>
 
# 
# Use a specific php config file (a dir which contains a php.ini file)
#       suPHP_ConfigPath /etc/php4/cgi/suphp/ 
# 
# Tells mod_suphp NOT to handle requests with the type <mime-type>.
#       suPHP_RemoveHandler <mime-type>
 </IfModule>
  • Aktifkan suphp,
  # a2enmod suphp

Selanjutnya edit tiap berkas konfigurasi VirtualHost, misal untuk domain wiki.samsul.web.id

  # vim /etc/apache2/sites-available/wiki.samsul.web.id.conf

Tambahkan direktif suPHP_UserGroup beserta nama pengguna tiap VirtualHost masing-masing,

<IfModule mod_suphp.c>
  suPHP_UserGroup wiki wiki
</IfModule>
  • Beri tanda pagar (#) atau hapus setiap direktif FCGid yang ada, misalnya
#AddHandler fcgid-script .php
#AddHandler fcgid-script .php5
#FCGIWrapper /home/wiki/fcgi-bin/php5.fcgi .php
#FCGIWrapper /home/wiki/fcgi-bin/php5.fcgi .php5
  • Bila ada direktif lain yang juga mengganggu, hapus juga. Dapat pula dilakukan dengan perintah berikut
  sed -i '/IPCCommTimeout/d' /etc/apache2/sites-enabled/*
  sed -i '/FcgidMaxRequestLen/d' /etc/apache2/sites-enabled/*
  sed -i '/php_admin_flag/d' /etc/apache2/sites-enabled/*
  sed -i '/php_admin_value/d' /etc/apache2/sites-enabled/*
  • Nonaktifkan modul FCGid
  # a2dismod fcgid
  • Restart Apache2
  # service apache2 restart

Sekarang server sudah beralih menggunakan suPHP.

  • linux/Mengganti.FCGid.dengan.suPHP.di.Running.Server
  • Terakhir diubah: 12 bulan yang lalu
  • (Perubahan eksternal)