MWN Website
ContactHome

FastCGI (Spanel)

FastCGI adalah protokol ekstensi bagi CGI yang memungkinkan kinerja yang lebih tinggi karena efisiensi yang lebih. Sebuah proses FastCGI umumnya tidak harus direstart atau dieksekusi ulang di setiap request, melainkan berjalan di background dan memproses banyak request dalam loop. FastCGI, sama seperti CGI, tidak terikat pada bahasa atau webserver tertentu. Anda dapat membuat aplikasi FastCGI dalam bahasa apa saja yang mendukungnya, seperti Perl, Python, Ruby, dll.

Keterangan lebih jauh tentang FastCGI: http://www.fastcgi.com .

Daftar isi

Mengaktifkan FastCGI

1. Plan hosting yang Anda pilih perlu memiliki fitur FastCGI. Hubungi staff support jika Anda tidak yakin.

2. Skrip CGI Anda, jika belum disesuaikan untuk FastCGI, perlu sedikit diubah. Misalnya, di Perl, Anda mengganti "use CGI" dan "$q = new CGI" menjadi "use CGI::Fast" dan "$q = new CGI::Fast". Di bahasa lain mungkin caranya sedikit berbeda, seperti pada Ruby tambahkan "require fcgi"

3. Skrip CGI Anda dinamai dengan akhiran .fcgi dan bukan lagi .cgi.

4. Buat file .htaccess (bila belum ada) dan tambahkan baris

AddHandler fastcgi-script .fcgi

Troubleshooting

Ketika diakses dari browser, hasilnya Internal Server Error

Untuk semua pesan error CGI dan FastCGI, Anda dapat melihatnya di error log. Namun memang untuk FastCGI pesan errornya kurang informatif, biasanya hanya ada keterangan bahwa skrip dijalankan/exit/tidak mengeluarkan header HTTP, seperti:

[Fri Apr 03 23:57:19 2009] [warn] FastCGI: (dynamic) server "/s/example.com/www/example.fcgi" (uid 0, gid 0) started 
(pid 12320)
[Fri Apr 03 23:58:56 2009] [warn] FastCGI: (dynamic) server "/s/example.com/www/example.fcgi.fcgi" (pid 12320) termi
nated by calling exit with status '0'
[Fri Apr 03 19:59:56 2009] [warn] FastCGI: (dynamic) server "/s/example.com/www/example.fcgi" has failed to remain r
unning for 30 seconds given 3 attempts, its restart interval has been backed off to 600 seconds

namun tidak jelas output dari skripnya itu sendiri di mana.

Karena itu dalam debugging, disarankan untuk mengubah sementara skrip Anda menjadi CGI dulu. Misalnya dengan diganti namanya (rename menjadi SESUATU.cgi) atau dikopi/disymlink. Jangan lupa update rule rewrite Anda di .htaccess seandainya Anda mengarahkan URL ke skrip FastCGI Anda. Nanti setelah debugging selesai, Anda dapat mengembalikan akses ke FastCGI.

Langkah lain adalah mencoba menjalankan dari command line. Contohnya, untuk skrip Python seperti Django:

$ cd ../sites/example.com/www
$ REQUEST_METHOD=GET SERVER_NAME=www.example.com SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 index.fcgi

Beberapa penyebab umum:

Gagal menemukan interpreter

Misalnya di Python, umum orang menuliss:

#!/usr/bin/env python

Di lingkungan FastCGI server hosting ini tidak bekerja. Ganti ini menjadi:

#!/usr/bin/python

Gagal memuat pustaka

Jika skrip CGI/FastCGI Anda berjalan sebagai User CGI, maka skrip seperti ini akan gagal memuat modul Python django:

#!/usr/bin/python
import sys
sys.path += ['/u/t10000/home/lib/python']

import django

Tapi dari command line akan berhasil. Ini karena sebagai CGI (lewat browser), skrip berjalan sebagai user cgi-t10000 yang tidak dapat mengakses home directory t10000 (mode permissionnya 0700). Sementara dari command line bisa, karena Anda berjalan sebagai t10000.

Untuk memperbaikinya, set skrip CGI/FastCGI Anda agar berjalan sebagai USER, bukan cgi-USER. Lihat artikel ini: User CGI.

Kill beberapa kali dan gagal up kembali?

T: Saya melakukan kill terhadap proses FastCGI saya (menggunakan /c/bin/my-fcgi) beberapa kali dalam waktu singkat, mengapa kemudian timbul 500 Internal Server Error di browser?

J: Ini memang kelakuan dari mod_fastcgi, jika sebuah aplikasi FastCGI gagal up minimal 30 detik dan ini terjadi selama 3 kali berturut-turut, maka mod_fastcgi tidak akan melakukan restarting lagi dalam waktu cepat, melainkan menundanya selama 600 detik (10 menit).

Skrip contoh

Merestart aplikasi FastCGI

Untuk melihat daftar proses aplikasi FastCGI Anda yang sedang berjalan, di command line:

$ /c/bin/my-fcgi list
20361  /usr/bin/python dispatch.fcgi
21211  /usr/bin/perl test-perl.fcgi
21230  /usr/local/bin/ruby test-ruby.fcgi
24152  /usr/bin/python dis.fcgi
25217  /usr/bin/python dispatch.fcgi

Untuk membunuh semua proses-proses tersebut, gunakan:

$ /c/bin/my-fcgi kill

Untuk membunuh dengan sinyal yang berbeda, gunakan:

$ /c/bin/my-fcgi kill -KILL

Untuk membunuh hanya proses tertentu saja, sebutkan PID-nya:

$ /c/bin/my-fcgi kill -KILL 20361 21211

Atau bisa juga dengan perintah killall atau pkill untuk membunuh berdasarkan nama program:

$ /c/bin/my-fcgi pkill dis.fcgi dispatch.fcgi

Navigasi

Feedback

Artikel Popular

  • selengkapnya...
  • Artikel Terbaru

  • selengkapnya...
  • Facebook dengan DomainSendiri.com, murah, bayar sekali per tahun!
    Facebook dengan DomainSendiri.com, murah, bayar sekali per tahun!
    Hak cipta © 2006-2012 PT Master Web Network Konten ditulis dan dikoleksi oleh staf MWN. Komentar ditulis oleh pembaca. MWN tidak bertanggung jawab atas akurasi dan/atau kekinian konten/komentar.