Konfigurasi PHP as CGI dengan suexec pada Apache

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


[root@server01 ~]# 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.

jika masih ada kekurangan mohon diberi masukan. Terimakasih 😉

Blog Wowrack Indonesia

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories

See More

Latest Article

Optimalkan kinerja bisnis sesuai kebutuhan Anda dengan layanan fleksibel Wowrack