Artikel lalu kita telah membahas seputar php Server baik dengan Apache ataupun Nginx. Kali ini penulis coba memberikan tutorial tentang bagaimana menerapkan suExec dan module fcgid pada Apache di Ubuntu Server. Tujuanya adalah memudahkan kita mengetahui user mana yang menyebabkan trafik tinggi. Jika kita membuat satu server dengan banyak pengguna layaknya shared hosting.
Tahap Instalasi dan Konfigurasi
Asumsi penulis, Anda sudah menginstal LAMP (Linux, Apache, Mariadb/MySQL, PHP). Jika belum Anda bisa baca artikel lalu di sini yakni (http://www.linuxku.com/2016/06/install-lamp-linux-apache-mysql-dan-php.html).Langsung saja kita praktek. Pertama-tama install dahulu module suExec dan module fcgid:
$ sudo apt-get install apache2-suexec libapache2-mod-fcgid apache2-mpm-worker apache2-suexec-customSebelumnya kita matikan dahulu module php dari Apache.
$ sudo a2dismod php5Perhatian jika Anda pengguna php7 yang mana ini sudah menjadi default di Ubuntu 16.04, Anda wajib mengganti php5 diperintah di atas dengan php7.
Kemudian aktifkan module berikut:
$ sudo a2enmod rewrite suexec include fcgid actions aliasLalu sunting berkas php.ini yang berada dalam direktori /etc/php5/cgi/ dengan perintah berikut:
$ sudo nano /etc/php5/cgi/php.iniCari kata cgi.fix_pathinfo dengan CTRL+W di nano. Dan ubah nilainya menjadi satu. cgi.fix_pathinfo = 1.
Keluar dari nano dan save. Lalu kemudian kita sunting kembali berkas module fcgid yang berada di /etc/apache2/mods-available/fcgid.conf.
$ sudo nano /etc/apache2/mods-available/fcgid.confTambahkan PHP_Fix_Pathinfo_Enable 1 seperti gambar berikut:
Keluar dari nano dan save. Dan restart Apache Anda.
$ sudo service apache2 restart
Tahap Implementasi
Penulis asumsikan kita membuat dua macam web dengan virtualhost, yang masing-masing di handle oleh user dan grup masing masing dari web tersebut.Pertama-tama buat terlebih dahulu user dan dan group nya.
$ sudo grupadd situs1 $ sudo grupadd situs2 $ sudo useradd -s /bin/false -d /var/www/situs1 -m -g situs1 situs1 $ sudo useradd -s /bin/false -d /var/www/situs2 -m -g situs2 situs2 $ sudo chmod 711 /var/www/situs1 $ sudo chmod 711 /var/www/situs2Kemudian buat direktori public_html, fcgi-bin, cgi-bin di masing-masing direktori virtualhost yang telah kita buat sebelumnya.
$ sudo mkdir -p /var/www/situs1/{public_html,fcgi-bin} $ sudo mkdir -p /var/www/situs2/{public_html,fcgi-bin} $ sudo chown situs1:situs1 /var/www/situs1/public_html $ sudo chown situs2:situs2 /var/www/situs2/public_htmlKemudian copy php.ini pada setiap virtualhost:
$ sudo cp /etc/php5/cli/php.ini /var/www/situs1 $ sudo cp /etc/php5/cli/php.ini /var/www/situs2Catatan: php.ini terletak pada direktori berbeda disesuaikan dengan versi php yg Anda gunakan, oleh karena itu cek terlebih dahulu letak php.ini dengan cara berikut:
$ php -i | grep php.iniJika sudah, sekarang kita ubar permission php.ini tersebut
$ sudo chmod +x /var/www/situs1/php.ini $ sudo chmod +x /var/www/situs2/php.ini $ sudo chown situs1:situs1 /var/www/situs1/php.ini $ sudo chown situs2:situs2 /var/www/situs2/php.iniKemudian mari coba kita cek isi dari suExec dengan perintah berikut:
$ sudo /usr/lib/apache2/suexec -VAnda akan melihat bahwa document root direktori (AP_DOC_ROOT) berada pada /var/www dengan demikian kita tidak akan bisa memanggil PHP binary secara langsung yang mana ia terletak di /usr/lib/cgi-bin/php karena berada di luar document root direktori, juga suExec tidak mengijinkan symlink. Sehingga, untuk menangani hal tersebut adalah dengan menciptakan skrip wrapper yang akan memanggil PHP binary(/usr/lib/cgi-bin/php) pada setiap situs di direktori /var/www. Dengan catatan, kepemilikan (permission) skrip wraper harus sesuai dengan user dan group yang mengakses.
$ sudo nano /var/www/situs1/fcgi-bin/situs1.fcgi
Dan masukan skrip berikut:
#!/bin/sh PHPRC=/var/www/situs1/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php5-cgiKemudian buat virtualhost nya di /etc/apache2/sites-available dengan cara berikut:
$ sudo nano /etc/apache2/sites-available/situs1.confDan masukan konfigurasinya sebagai berikut:
<VirtualHost *:80> DocumentRoot /var/www/situs1/public_html ServerName www.situs1.com SuexecUserGroup situs1 situs1 ErrorLog /var/log/apache2/demo1-error_log LogLevel debug CustomLog /var/log/apache2/demo1-access_log combined <Directory /> Options FollowSymLinks AllowOverride All Require all granted </Directory> AddHandler php-fcgi .php Action php-fcgi /fcgi-bin/situs1.fcgi Alias /fcgi-bin/ /var/www/situs1/fcgi-bin/ <Location /fcgi-bin/> SetHandler fcgid-script Options +ExecCGI </Location> RewriteEngine On RewriteRule ^/fcgi-bin/[^/]*$ / [PT] </VirtualHost>Kemudian aktifkan virtualhost tersebut di apache dengan cara berikut:
$ sudo a2ensite situs1.conf $ sudo service apache2 restartUntuk mencoba apakah uid/gui sudah benar buat skrip php berikut:
sudo nano /var/www/situs1/public_html/index.php
<?php system("id");Cek jika sudah seperti ini berarti Anda sudah benar:
Karena situs1 semua konfigurasinya sudah benar langkah selanjutnya yakni kita copy semua configurasi dari situs1 dan sedikit modifikasi menyesuaikan dengan direktori situs2.
Berikut ini yang perlu Anda copy dan modifikasi:
sudo cp /var/www/situs1/fcgi-bin/situs1.fcgi /var/www/situs2/fcgi-bin/situs2.fcgi sudo cp /etc/apache2/sites-available/situs1.conf /etc/apache2/sites-available/situs2.conf sudo cp /var/www/situs1/public_html/index.php /var/www/situs2/public_html/ sudo chown situs2:situs2 -R /var/www/situs2 sudo a2ensite situs2
Tes kembali pada situs2, jika hasilnya sudah seperti gambar di bawah artinya Anda telah sukses.
Website ini menganut paham demokrasi wkwk
Jangan lupa gunakan emot biar akrab gan (/ ^.^)/
EmoticonEmoticon