Mod Fcgid
Mod Fcgid adalah modul apache yang memungkinkannya untuk berbicara dengan aplikasi berkemampuan fastcgi. Ini dapat digunakan untuk mengatur dengan Apache untuk menjalankan php melalui fastcgi. Ini adalah alternatif dari mod_fastcgi lama dan memiliki beberapa perbedaan dengannya.
Dalam posting ini kita akan mengatur apache dengan php menggunakan modul ini. Anda juga dapat mengatur apache + php dengan mod_fastcgi.
Karena fastcgi menjauhkan eksekusi php dari apache, kita bebas menggunakan mpm berbasis thread seperti mpm worker.
Instal
Untuk setup kita membutuhkan apache, php (dengan cgi binary), mod_fcgid, mpm worker. Instal langsung dari commandline.
# sudo apt-get install apache2 libapache2-mod-fcgid apache2-mpm-worker php5 php5-cgi
Aktifkan mod_fcgid
# sudo a2enmod fcgid
Menemukan file konfigurasi
Setelah menginstal paket-paket yang diperlukan, saatnya untuk mengkonfigurasi mod_fcgid. Konfigurasi sebagian besar dilakukan melalui berbagai file konfigurasi. Oleh karena itu penting untuk mengetahui di mana file konfigurasi berada.
File konfigurasi apache di ubuntu/debian terletak di jalur berikut
/etc/apache2/sites-available/default
Untuk mengetahui lokasi file konfigurasi apache untuk distro Anda, gunakan perintah apache2/httpd/apachectl.
# apachectl -S apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:80 is a NameVirtualHost default server 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) port 80 namevhost 127.0.1.1 (/etc/apache2/sites-enabled/000-default:1) Syntax OK
Jadi file konfigurasinya ada di /etc/apache2/sites-enabled/000-default .
Konfigurasikan Fcgid
Apache perlu dikonfigurasi untuk menggunakan mod_fcgid untuk memproses semua file ".php" dan mod_fcgid perlu diberi tahu lokasi biner php fastcgi, yaitu php-cgi terletak di
/usr/bin/php-cgi
Tambahkan konfigurasi berikut ke bagian direktori root di blok vhost
<Ifmodule mod_fcgid.c> # FCGID registers a handler named fcgid-script AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /usr/local/bin/php-fcgid-wrapper </IfModule>
Ini memberitahu Apache untuk menggunakan skrip pembungkus untuk meluncurkan proses fastcgi php-cgi. Ini juga memberitahu apache untuk menjalankan file .php menggunakan fcgid handler.
Untuk mengontrol pengaturan fcgid seperti jumlah proses maksimum, tambahkan pengaturan yang relevan di luar blok vhost.
<Ifmodule mod_fcgid.c> # Context - server config FcgidMaxProcesses 150 # Otherwise php output shall be buffered FcgidOutputBufferSize 0 </IfModule>
Pengaturan ini berlaku untuk konteks server dan karenanya harus berada di luar blok Vhost mana pun.
Skrip pembungkus
Sekarang skrip pembungkus yang digunakan oleh mod_fcgid untuk meluncurkan proses php-cgi.
#!/bin/sh # Set desired PHP_FCGI_* environment variables. # Example: # PHP FastCGI processes exit after 500 requests by default. PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS # Replace with the path to your FastCGI-enabled PHP executable exec /usr/bin/php-cgi
Kami menyimpan skrip wrapper di /usr/local/bin/php-fcgid-wrapper tetapi dapat disimpan di mana saja dan jalurnya harus disebutkan dalam konfigurasi apache.
Jadikan skrip pembungkus dapat dieksekusi menggunakan chmod
/usr/local/bin# chmod +x php-fcgid-wrapper
Jika tidak, Anda mendapatkan kesalahan di log apache Anda seperti ini
[Tue Jun 11 02:53:20 2013] [warn] [client 127.0.0.1] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server [Tue Jun 11 02:53:20 2013] [error] [client 127.0.0.1] Premature end of script headers: server.php
Pastikan juga untuk tidak menggunakan setelan "PHP_FCGI_CHILDREN". Biner php-cgi dapat membayar beberapa proses anak dan mengelolanya, tetapi fcgid tidak akan meneruskan lebih dari satu permintaan ke biner php-cgi pada satu waktu, oleh karena itu proses anak tidak akan digunakan. Ini dijelaskan dalam dokumentasi
PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled. The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.
Anda juga tidak dapat menggunakan APC dengan fcgid.