Pengen Punya WebSite instan kualitas intan ?

Wednesday, June 1, 2011

Konfigurasi PHP as CGI dengan suexec pada Apache

Untuk penjelasan php-cgi bisa dilihat di tulisan sebelumnya.
Catatan ini berasumsi, Apache dan php suda terinstall dan jalan dengan benar, pastikan php-cli dan mod_fcgid sudah terinstall, jika belum install dulu:

[root@server01 ~]# yum mod_fcgid php-cli

disable mod_php dengan cara beri tanda comment pada semua baris di file berikut:

/etc/httpd/conf.d/php.conf

edit file /etc/php.ini

###pastikan ada baris berikut
###[...]
cgi.fix_pathinfo = 1


Menyiapkan direktory untuk masing-masing vhost:

[root@server01 ~]# mkdir -p /home/prayoga/www/idprayoga.com/{htdocs,cgi-bin}
[root@server01 ~]# mkdir -p /home/perdana/www/idperdana.com/{htdocs,cgi-bin}
[root@server01 ~]# chown -R prayoga:prayoga /home/prayoga/www/idprayoga.com
[root@server01 ~]# chown -R perdana:perdana /home/perdana/www/idperdana.com
[root@server01 ~]# chmod -R 755 /home/prayoga/www/idprayoga.com
[root@server01 ~]# chmod -R 755 /home/perdana/www/idperdana.com


Karena kita akan menjalankan PHP menggunakan suExec, harus di cek terlebih dahulu letak document root suExec dengan perintah suexec -V

 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"


Di atas terlihat document root terletak pada /var/www (AP_DOC_ROOT="/var/www"). Dengan demikian kita tidak bisa memanggil binary PHP (/usr/bin/php-cgi) secara langsung karena berada di luar document root suexec. Dan suexec juga tidak mengijinkan symlink. Sehingga, untuk menangani hal tersebut adalah dengan menciptakan skrip wrapper yang akan memanggil binary PHP(/usr/bin/php-cgi) pada setiap situs web di direktory /var/www. Sebagai catatan, kepemilikan skrip wraper harus sesuai dengan user dan group yang mengakses.

[root@server01 ~]# mkdir -p /var/www/php-fcgi-script/prayoga
[root@server01 ~]# mkdir -p /var/www/php-fcgi-script/perdana


[root@server01 ~]# nano /var/www/php-fcgi-script/prayoga/php-fcgi-starter
isi file tersebut sebagai berikut :

=====================================
#!/bin/sh
PHPRC=/etc/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi
======================================

keterangan :
baris PHPRC adalah direktory tempat file php.ini berada
baris PHP_FCGI_MAX_REQUESTS adalah jumlah maksimum permintaan sebelum proses fcgid dihentikan dan yang baru diluncurkan
baris PHP_FCGI_CHILDREN mendefinisikan jumlah child PHP yang akan diluncurkan


buat juga file php-fcgi-starter pada /var/www/php-fcgi-script/perdana

ubah permission dan kepemilikan file php-fcgi-starter

[root@server01 ~]# chmod 755 /var/www/php-fcgi-script/prayoga/php-fcgi-starter
[root@server01 ~]# chmod 755 /var/www/php-fcgi-script/perdana/php-fcgi-starter
[root@server01 ~]# chown -R prayoga:prayoga /var/www/php-fcgi-script/prayoga/
[root@server01 ~]# chown -R perdana:perdana /var/www/php-fcgi-script/perdana/


Buat virtual host pada httpd.conf

NameVirtualHost 10.100.100.99:80

<VirtualHost 10.100.100.99:80>
        ServerAdmin webmaster@idprayoga.com
        DocumentRoot "/home/prayoga/www/idprayoga.com/htdocs"
        ServerName idprayoga.com
        ServerAlias idprayoga.com
        CustomLog "|/usr/sbin/cronolog /var/apachelogs/prayoga/%Y/%m/%d/idprayoga.com.access_log" combined
        ErrorLog "|/usr/sbin/cronolog /var/apachelogs/prayoga/%Y/%m/%d/idprayoga.com.error_log"

        ScriptAlias /cgi-bin/ "/home/prayoga/www/idprayoga.com/cgi-bin/"
        <Directory "/home/prayoga/www/idprayoga.com/cgi-bin">
                AllowOverride None
                Options None
                Order allow,deny
                Allow from all
        </Directory>

 <IfModule mod_fcgid.c>
                SuexecUserGroup prayoga prayoga
                PHP_Fix_Pathinfo_Enable 1
                <Directory /home/prayoga/www/idprayoga.com/htdocs>
                        Options +ExecCGI
                        AllowOverride All
                        AddHandler fcgid-script .php
                        FCGIWrapper /var/www/php-fcgi-scripts/prayoga/php-fcgi-starter .php
                        Order allow,deny
                        Allow from all
               </Directory>
        </IfModule>
</VirtualHost>


buat juga untuk idperdana.com seperti di atas dan sesuaikan path serta user groupnya

Restart apache.

Untuk testing, anda bisa membuat file ceking.php di masing-masing direktory htdocs.
isi file tersebut :

<?php
system("id");
?>


kemudian akses dari browser, maka harus menunjukkan masing-masing user dan group yang menjalankan.

saya masih belajar, jika masih ada kekurangan mohon diberi masukan. Terimakasih ;)

0 comments:

Post a Comment