h1

Cara konfigurasi Load Balancer dengan ModFastCGI di Lighttpd

January 20, 2014

Deskripsi

lighttpd Menyediakan antarmuka untuk program eksternal Itu mendukung antarmuka FastCGI . Antarmuka FastCGI didefinisikan oleh http://www.fastcgi.com/ dan merupakan antarmuka platform-independen dan server independen Antara web – aplikasi dan webserver .

Ini berarti Bahwa Itu program FastCGI berjalan dengan webserver Apache akan berjalan mulus dengan lighttpd dan sebaliknya .

FastCGI

Peringatan : Pada PHP 5.2.3 , biner cgi diinstal sebagai \” /usr/local/bin/php-cgi \” secara default , bukan \” /usr/local/bin/php \” . Pastikan untuk mengganti bagian yang relevan dalam dokumentasi di bawah ini .

FastCGI Menghapus banyak Keterbatasan program CGI . Program CGI Itu Memiliki masalah untuk melakukan banyak Ulang oleh webserver untuk setiap permintaan yang mengarah pada nilai-nilai kinerja benar-benar buruk .

FastCGI Menghapus keterbatasan ini dengan menjaga proses berjalan dan penanganan permintaan oleh proses ini selalu berjalan . Ini Menghapus waktu yang digunakan untuk fork ( ) dan waktu startup keseluruhan dan pembersihan Yang Diperlukan untuk menciptakan dan menghancurkan proses .

Sementara program CGI ke server comunicate atas pipa , Proses FastCGI menggunakan Unix – Domain – Socket atau TCP / IP untuk berbicara dengan webserver . Ini Memberikan Anda kedua keunggulan tunggal atas program CGI : FastCGI tidak harus berjalan di webserver itu sendiri tetapi di mana saja dalam jaringan .
lighttpd Membawa itu sedikit lebih jauh dengan menyediakan FastCGI load- balancer intern yang dapat digunakan untuk menyeimbangkan beban selama beberapa FastCGI Server . Berbeda dengan solusi lain hanya proses FastCGI harus pada seluruh klaster dan tidak webserver . Itu Memberikan proses FastCGI misalnya sumber daya lebih dari satu load- balancer + apache + mod_php solusi .

Jika Anda membandingkan terhadap pengaturan FastCGI apache + mod_php Itu Anda harus mencatat tambahan FastCGI FastCGI menyediakan keamanan sebagai proses dapat berjalan di bawah hak akses yang berbeda dari webserver dan dapat hidup di chroot Juga Yang Mungkin berbeda dari satu webserver berjalan dalam .

Menyediakan dukungan FastCGI lighttpd melalui FastCGI – modul ( mod_fastcgi ) Yang Menyediakan tiga pilihan dalam config-file :

fastcgi.debug
antara 0 dan 65535 nilai sampai September debug – tingkat dalam modul FastCGI . Saat ini hanya 0 dan 1 digunakan . Gunakan 1 untuk mengaktifkan beberapa output debug , 0 untuk menonaktifkannya .

contoh:
    fastcgi.debug = 1
   
fastcgi.map-extensions
memetakan beberapa ekstensi ke server FastCGI sama

contoh:   
    fastcgi.map-extensions = ( \”.php3\” => \”.php\” )

or for multiple

    fastcgi.map-extensions = ( \”.php3\” => \”.php\”, \”.php4\” => \”.php\” )
   

fastcgi.server
memberitahu modul mana untuk mengirim permintaan untuk FastCGI. Setiap file ekstensi Bisa Punya handler sendiri. Load-Balancing dilakukan dengan Menentukan beberapa penangan untuk ekstensi yang sama.

struktur bagian fastcgi.server:

    ( =>
  ( [ => ]
    ( # Be careful: lighty does *not* warn you if it doesn\’t know a specified option here (make sure you have no typos)
      \”host\” => ,
      \”port\” => ,
      \”socket\” => ,                 # either socket or host+port
      \”bin-path\” => ,               # optional
      \”bin-environment\” => ,         # optional
      \”bin-copy-environment\” => ,    # optional
      \”mode\” => ,                   # optional
      \”docroot\” => ,               # optional if \”mode\” is not \”authorizer\”
      \”check-local\” => ,            # optional
      \”max-procs\” => ,             # optional – when omitted, default is 4
      \”broken-scriptfilename\” => , # optional
      \”fix-root-scriptname\” => ,   # optional, since 1.4.23 (option didn\’t work before 1.4.23)
      \”disable-time\” => ,          # optional
      \”allow-x-send-file\” => ,     # optional
      \”kill-signal\” => ,           # optional, default is SIGTERM(15) (v1.4.14+)
    ),
    ( \”host\” => …
    )
  )
)
   

  •     : adalah file-ekstensi atau awalan (jika dimulai dengan \”/\”)
  •     : (\”. fastcgi.backend.php *\” misalnya Nama \”php\” akan menunjukkan sebagai) Nama opsional Itu muncul dalam statistik yang dihasilkan dari mod_status, berguna untuk menunjukkan mana backend handler diproses ekstensi ini
  •     \”Tuan rumah\”: adalah ip dari proses FastCGI (tidak ada dukungan untuk hostname sekarang, lihat # 1417)
  •     \”Port\”: adalah tcp-port pada \”host\” yang digunakan oleh proses FastCGI
  •     \”Bin-jalan\”: path ke FastCGI biner Lokal Yang Harus dimulai jika FastCGI berjalan nonlokal
  •     \”Socket\”: path ke soket unix-domain
  •     \”Mode\” adalah mode protokol FastCGI. Default adalah \”jawaban\”, juga \”Kuasa\” mode Diimplementasikan.
  •     \”Docroot\”: adalah opsional dan merupakan docroot pada remote host untuk default \”tanggapan\” mode. Untuk \”Kuasa\” mode itu WAJIB dan menunjuk ke docroot untuk permintaan Authorized. Alasan Untuk keamanan, disarankan untuk Jauhkan docroot ini luar pohon server.document-root.
  •     \”Check-local\”: adalah opsional dan mungkin akan \”memungkinkan\” (default) atau \”menonaktifkan\”. Jika diaktifkan server cek pertama untuk file dalam lokal \’server.document-root\’ pohon dan mengembalikan 404 (Not Found) jika tidak ada file tersebut, dan tidak jatuh kembali ke FastCGI. Jika dinonaktifkan, server meneruskan permintaan ke antarmuka FastCGI tanpa cek ini.
  •     \”Patah-scriptfilename\”: istirahat SCRIPT_FILENAME Bahwa dengan cara PHP dapat mengekstrak PATH_INFO dari itu (default: dinonaktifkan)
  •     \”Perbaiki-root-scriptname\”: menggunakan ini untuk backends dengan ekstensi \”/\” (dan check-Lokal dinonaktifkan).
  •     \”Disable-time\”: waktu untuk menunggu sebelum backend cacat diperiksa lagi (lakukan ini untuk menetapkan 0 untuk backends Anda Telur ikan dengan lighttpd, yaitu bin-path set, karena lighty tidak akan restart maka backends Anda)
  •     \”Biarkan-x-send-file\”: kontrol jika X-lighttpd-kirim file, X dan X-Sendfile2 sendfile (sejak 1.4.24) header digunakan. Lihat X-sendfile.

Jika bin-path diatur:

  •     \”Max-procs\”: jumlah Proses FastCGI Itu akan dimulai
  •     \”Bin-lingkungan\”: menempatkan masuk ke lingkungan dari proses mulai
  •     \”Bin-copy-lingkungan\”: membersihkan lingkungan dan hanya menyalin entri tertentu ke lingkungan segar dari proses bertelur
  •     \”Bunuh-sinyal\”: Dengan lighttpd standar mengirim SIGTERM ke Proses FastCGI, que Apakah melahirkan oleh lighttpd. Aplikasi, hubungan que libfcgi, harus dibunuh dengan SIGUSR1. Ini Berlaku untuk php <5.2.1, lua-magnet dan lain-lain.

   
CONTOH

Multiple extensions dalam host yang sama:

fastcgi.server = (
  \”.php\” =>
  (( \”host\” => \”127.0.0.1\”,
     \”port\” => 1026,
      \”bin-path\” => \”/usr/local/bin/php\”
  )),
  \”.php4\” =>
  (( \”host\” => \”127.0.0.1\”,
     \”port\” => 1026
  ))
)

   
   
Contoh dengan prefix file:

fastcgi.server = (
  \”/remote_scripts/\” =>
  (( \”host\” => \”192.168.0.3\”,
     \”port\” => 9000,
     \”check-local\” => \”disable\”,
     \”docroot\” => \”/\” # remote server may use
                      # its own docroot
  ))
)

Permintaan \”http://my.example.org/remote_scripts/test.cgi\” akan diteruskan ke server FastCGI pada \”192.168.0.3\” dan nilai \”/ remote_scripts / test.cgi\” akan digunakan untuk variabel SCRIPT_NAME. Server remote Mungkin tambahkan itu Dengan akar dokumen sendiri. Penanganan file indeks Juga Tanggung Jawab server jauh untuk kasus ini.

Dalam kasus itu awalan tidak diakhiri dengan garis miring, awalan akan ditangani sebagai berkas dan \”/ test.cgi\” akan Menjadi bagian dari PATH_INFO bukan SCRIPT_NAME.

Contoh untuk \”Kuasa\” mode:
    fastcgi.server = ( \”/remote_scripts/\” =>
      (( \”host\” => \”10.0.0.2\”,
         \”port\” => 9000,
         \”docroot\” => \”/path_to_private_docs\”,
         \”mode\” => \”authorizer\”
      ))
    )
   
   
Catatan Bahwa jika \”docroot\” ditentukan maka nilainya akan digunakan dalam variabel DOCUMENT_ROOT dan SCRIPT_FILENAME berlalu ke server FastCGI.

X-Sendfile

Jika \” memungkinkan – x – kirim – file\” fitur diaktifkan , Anda dapat Gunakan header berikut untuk mengirim file bukan isi yang dihasilkan dari backend .
Sebagai Ini Memungkinkan backend untuk mengirim file apapun untuk lighttpd dapat membaca klien , Anda hanya harus menggunakan ini untuk backends terpercaya . ( Sebagai contoh : backend Anda mungkin tidak dapat membaca file kunci SSL , tetapi dapat Lighttpd lighty Jadi meskipun tidak akan memberikan file kunci SSL dalam permintaan reguler dan backend tidak bisa membacanya , backend bisa menggunakan X. – sendfile untuk mendapatkan file kunci SSL )
Sebuah backend bisa:

    mengirim \” X – sendfile : / absolute / path / ke / file\” header ( \” X – lighttpd – kirim – file\” adalah alias tua untuk \” X – sendfile \” ) :
    lighttpd akan mengirimkan file yang ditentukan dan menggunakan file panjang untuk header Content -Length jika dapat membaca file tersebut, Jika tidak, akan mengabaikan header .
    mengirim \” X – Sendfile2 : kisaran nama file \” header ( tersedia sejak 1.4.24 )
    Nama file harus urlencoded ( termasuk encoding \’ , \’ sebagai \’ % 2c \’ : str_replace ( \’ , \’ , \’ % 2c \’ , urlencode ( $ path ) ) 😉
    Rentang memiliki bentuk \” start- end \” ( inklusif end ) atau \” start- \” ( dari awal sampai akhir berkas ) , Anda harus selalu menentukan jangkauan, menggunakan \” 0 – \” untuk file yang lengkap .
    Contoh: X – Sendfile2 : / tmp / test.txt 0-499 mengirimkan pertama 500 byte dari / tmp / test.txt .
    Anda dapat mengirim header ini lebih dari sebelas Dengan parameter yang berbeda ( atau Anda dapat menggabungkan nilai-nilai tunggal dengan \” , \” di antara mereka ) .

Berikut ini adalah contoh PHP yang mendukung Implementasi download resumable:

<?php

// Let\’s assume that $file contains the location of the file to download
$file = \”/path/to/file\”;

// If the HTTP client needs to resume a download it will send a HTTP header called \”Range\”
// In case of a download resume (for instance when using wget -c), the header will be like \”bytes=2375680-\”
// See RFC2616 section 14.35.2 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2
if (isset($_SERVER[\’HTTP_RANGE\’]) && preg_match(\’/\\Abytes=[0-9]+-\\z/\’, $_SERVER[\’HTTP_RANGE\’])) {

    // Set Content-Range header which should be like \”bytes 2375680-12103815/12103816\”
    // That is start byte | dash | last byte | slash | total byte size
    // See RFC2616 section 14.16 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16
    $length = filesize($file);
    $start = substr($_SERVER[\’HTTP_RANGE\’],6,-1);
    $end = $length – 1;
    header(\”Content-Range: bytes $start-$end/$length\”);

    // X-Sendfile2 does not set the 206 status code, we have to set it manually
    // See RFC2616 section 10.2.7 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.7
    header(\”HTTP/1.1 206 Partial content\”);

    // The X-Sendfile2 with resume support should be like \”/path/to/file 2375680-\”
    header(\”X-Sendfile2: $file $start-\”);

} else {

    // Usual X-Sendfile header should be like \”/path/to/file\”
    header(\”X-Sendfile: $file\”);

}

?>

Load-Balancing

Otomatis Menyediakan Plugin FastCGI untuk memuat-balancing FastCGI Antara beberapa server.

fastcgi.server = ( \”.php\” =>
  (
    ( \”host\” => \”10.0.0.2\”,
      \”port\” => 1030
    ),
    ( \”host\” => \”10.0.0.3\”,
      \”port\” => 1030 )
    )
  )

Untuk memahami bagaimana load-balancing karya fastcgi.debug Anda dapat mengaktifkan opsi tersebut dan akan mendapatkan output yang sama seperti di sini:

  proc: 127.0.0.1 1031  1 1 1 31454
  proc: 127.0.0.1 1028  1 1 1 31442
  proc: 127.0.0.1 1030  1 1 1 31449
  proc: 127.0.0.1 1029  1 1 2 31447
  proc: 127.0.0.1 1026  1 1 2 31438
  got proc: 34 31454
  release proc: 40 31438
  proc: 127.0.0.1 1026  1 1 1 31438
  proc: 127.0.0.1 1028  1 1 1 31442
  proc: 127.0.0.1 1030  1 1 1 31449
  proc: 127.0.0.1 1031  1 1 2 31454
  proc: 127.0.0.1 1029  1 1 2 31447
 
 
 Bahkan jika FastCGI ini untuk beberapa anak-anak pada mesin lokal penjelasan berikut ini berlaku untuk sambungan jarak jauh juga.

Output menunjukkan:

     IP, port, unix-socket (di sini kosong)
     negara adalah-lokal (0 – unset, 1 – berjalan, …)
     koneksi aktif (beban)
     PID

Seperti yang Anda lihat daftar selalu diurutkan oleh medan beban.
Setiap kali koneksi baru diminta, entri pertama (The One dengan Buku beban awal) dipilih, beban Meningkat (punya proc …) dan daftar diurutkan lagi.
Jika permintaan FastCGI dilakukan atau koneksi akan putus, beban pada Mengurangi FastCGI proc dan daftar diurutkan lagi (release proc …)
Perilaku ini sangat ringan dalam kode dan masih sangat efisien karena terus-fastcgi server Sama dimuat bahkan jika melakukan banyak CPU yang berbeda.

FastCGI and Programming Languages
Preparing PHP as a FastCGI program

Salah satu Paling Penting yang aplikasi memiliki antarmuka FastCGI adalah php yang dapat didownload dari http://www.php.net/ . Anda harus mengkompilasi ulang php dari sumber mengaktifkan antarmuka FastCGI karena biasanya tidak diaktifkan secara default dalam distribusi .

Jika Anda memiliki instalasi bekerja Sudah PHP pada webserver menjalankan script kecil yang hanya berisi

 

dan mencari baris dalam Itu berisi panggilan configure . Anda dapat menggunakannya sebagai dasar untuk kompilasi .

Anda harus menghapus semua kejadian dari ` – dengan – apxs `, ` – with- apxs2 ` dan sejenisnya yang akan membangun PHP dengan dukungan Apache . Tambahkan tiga switch berikutnya untuk mengkompilasi PHP dengan dukungan FastCGI .

  $ . / Configure \\
    – Aktifkan – fastcgi \\
    – Aktifkan -force – cgi – redirect \\
    …

Setelah kompilasi dan instalasi Itu memeriksa biner PHP Anda berisi dukungan FastCGI dengan menghubungi :

  $ Php – v
  PHP 4.3.3RC2 – dev ( cgi – FCGI ) (dibangun : 19 Oktober 2003 23:19:17 )

Bagian yang penting adalah ( cgi – FCGI ) .

Memulai FastCGI – PHP

Dimulai dengan versi 1.3.6 lighttpd dapat menelurkan Proses FastCGI sendiri secara lokal jika perlu :

  fastcgi.server = ( . \” php \” = >
    ( ( \” Socket \” = > \” / tmp / php – fastcgi.socket \”
        \” Bin – path \” = > \” / usr / local / bin / php \”
    ) )
  )

Menyediakan PHP 2 Yang variabel lingkungan khusus mengendalikan jumlah pekerja melahirkan di bawah pengawasan dari sebuah proses tunggal menonton ( PHP_FCGI_CHILDREN ) dan jumlah permintaan yang menangani seorang pekerja tunggal sebelum membunuh dirinya sendiri .

fastcgi.server = ( . \” php \” = >
  ( ( \” Socket \” = > \” / tmp / php – fastcgi.socket \”
     \” Bin – path \” = > \” / usr / local / bin / php \”
     \” Bin – lingkungan \” = > (
       \” PHP_FCGI_CHILDREN \” = > \” 16 \” ,
       \” PHP_FCGI_MAX_REQUESTS \” = > \” 10000 \”
     )
  ) )
)

Meningkatkan keamanan proses dimulai Anda hanya harus melewati variabel lingkungan yang Diperlukan untuk proses FastCGI .

fastcgi.server = ( . \” php \” = >
   ( ( \” Socket \” = > \” / tmp / php – fastcgi.socket \”
      \” Bin – path \” = > \” / usr / local / bin / php \”
      \” Bin – lingkungan \” = > (
         \” PHP_FCGI_CHILDREN \” = > \” 16 \” ,
         \” PHP_FCGI_MAX_REQUESTS \” = > \” 10000 \” ) ,
      \” Bin – copy – lingkungan \” = > (
     \” PATH \” , \” SHELL \” , \” USER \” )
   ) )
 )

Konfigurasi PHP

Jika Anda ingin menggunakan PATH_INFO dan PHP_SELF di dalam kamu script PHP Anda harus mengkonfigurasi php dan lighttpd . Php.ini membutuhkan pilihan :

  cgi.fix_pathinfo = 1

dan opsi \” patah – scriptfilename \” fastcgi.server dalam konfigurasi Anda :

fastcgi.server = ( . \” php \” = >
  ( ( \” Socket \” = > \” / tmp / php – fastcgi.socket \”
      \” Bin – path \” = > \” / usr / local / bin / php \”
      \” Bin – lingkungan \” = > (
        \” PHP_FCGI_CHILDREN \” = > \” 16 \” ,
        \” PHP_FCGI_MAX_REQUESTS \” = > \” 10000 \”
      )
      \” Bin – copy – lingkungan \” = > ( \” PATH \” , \” SHELL \” , \” USER \” ) ,
      \” Patah – scriptfilename \” = > \” mengaktifkan\”
  ) )
)

Mengapa hal ini ? yang \” cgi.fix_pathinfo = 0 \” akan memberi Anda bekerja tetapi tidak PHP_SELF PATH_INFO . Jika Anda mengaktifkannya , ternyata sekitar. Untuk memperbaiki PATH_INFO yang ` – enable – buang – jalan \’ membutuhkan SCRIPT_FILENAME Yang melawan spec CGI , patah – scriptfilename . Dengan \” cgi.fix_pathinfo = 1 \” di php.ini dan \” patah – scriptfilename = > \” mengaktifkan \” \” Anda mendapatkan keduanya .

PERHATIKAN BAHWA biner CGI telah – diubah namanya menjadi php – cgi di 5.2.3 , sehingga Anda mungkin akan memiliki jalan seperti / usr / local / bin / php – cgi dalam konfigurasi Anda .

Roadsend PHP – PHP The Other

Roadsend PHP , tersedia secara bebas dari http://code.roadsend.com/pcc , merupakan Pelaksanaan alternatif PHP Itu Bekerja dengan lighttpd . Hal ini dapat menjalankan kode PHP langsung (seperti Zend PHP tidak) , tetapi bisa mengkompilasi kode PHP Juga Langsung ke binari FastCGI asli .

. Contoh konfigurasi dapat digunakan untuk menafsirkan Itu file php pada server Anda dengan PHP Roadsend :

fastcgi.server = ( . \” php \” = >
  ( \” Localhost \” = >
    ( \”Tuan rumah \” = > \” 127.0.0.1 \”
      \”Port\” = > 1026,
      \” Bin – path \” = > \” / opt / roadsend / pcc / modules / FastCGI / pcc.fcgi \”
    )
  )
)

Untuk menggunakan aplikasi dikompilasi , Anda akan memerlukan mod_rewrite diaktifkan pada server yang lighttpd Anda . Dengan asumsi aplikasi Anda bernama \” myapp \” , copy dikompilasi app \” myapp.fcgi \” dan Asosiasi perpustakaan \” libmyapp_u.so \” yang diciptakan oleh pcc ke direktori cgi – bin anda :

     myapp.fcgi libmyapp_u.so cp / usr / lib / cgi – bin /

Kami menggunakan modul mod_rewrite untuk meraih semua permintaan untuk file PHP di direktori root aplikasi web dan re -route mereka ke biner FastCGI . Kami Juga memungkinkan untuk file index.php

# Sajikan halaman index
url.rewrite – once = ( \” ^ / myapp / $ \” = > \” / myapp / index.php \” )

# Main entry FastCGI
$ HTTP [ \” url \” ] = ~ \” ^ / myapp / . + \\ . Php $ \” {
  fastcgi.server = ( \” / myapp \” = >
    ( \” Localhost \” = >
      ( \” Bin – path \” = > \” / var / www / localhost / cgi – bin / myapp.fcgi \”
        \” docroot \” = > \” / var / www / localhost / htdocs / myapp \”
        \”Tuan rumah \” = > \” 127.0.0.1 \”
        \”Port\” = > 1026,
        \” Check- local \” = > \” menonaktifkan\”
      )
    )
  )
# } HTTP [ url ]

Pemijahan eksternal

Pemijahan Proses FastCGI langsung di webserver memiliki beberapa kelemahan seperti

    Proses FastCGI hanya dapat dijalankan secara lokal
    memiliki hak akses yang sama sebagai webserver
    memiliki dasar yang sama seperti webserver – dir

Segera setelah Anda menggunakan FastCGI Server terpisah untuk melepas beberapa beban dari webserver Anda harus memeriksa proses FastCGI eksternal dengan program seperti \” spawn – fcgi \” .

\” Telur ikan – FCGI \” digunakan untuk memulai proses FastCGI dalam lingkungan sendiri dan pada bulan September user- id , kelompok – id dan mengubah lain root-directory ( chroot ) .

Untuk kenyamanan sebuah skrip wrapper Harus digunakan Yang Membawa mengurus semua opsi Diperlukan . Script tersebut dalam disertakan dalam distribusi lighttpd dan panggilan spawn – php.sh .

Script memiliki seperangkat variabel config Anda harus melihat pada :

  # # Path ABSOLUTE ke biner spawn – fcgi
  SPAWNFCGI = \” / usr / local / sbin / spawn – fcgi \”

  # # Path ABSOLUTE ke biner PHP
  FCGIPROGRAM = \” / usr / local / bin / php \”

  # # Ikatkan ke tcp -port di localhost
  FCGIPORT = \” 1026 \”

  # # Ikatkan ke unix domain socket
  # FCGISOCKET = \” / tmp / php.sock \”
  # # Jumlah PHP anak-anaknya untuk bertelur
  PHP_FCGI_CHILDREN = 10

  # # Jumlah permintaan server oleh seorang php – proses tunggal sampai
  # # Apakah akan Ulang
  PHP_FCGI_MAX_REQUESTS = 1000

  # # IP adresses mana PHP harus mengakses koneksi server
  # # Dari
  FCGI_WEB_SERVER_ADDRS = \” 127.0.0.1,192.168.0.1 \”

  # Diizinkan variabel lingkungan dipisahkan dengan spasi
  ALLOWED_ENV = \” oracle PATH PENGGUNA \”

  # # Jika script ini dijalankan sebagai saklar root menjadi user Mengikuti
  Ekstensi = wwwrun
  GroupId = wwwrun

  exec -a $ $ SPAWNFCGI FCGI_WEB_SERVER_ADDRS FCGIPORT – p $ $ – f – u $ Ekstensi FCGIPROGRAM – g $ groupId

Jika Anda Memiliki variabel nilai-nilai pada bulan September Itu Fit untuk setup Anda, Anda dapat memulainya dengan menghubungi :

  $ Bibit – php.sh
  spawn – fcgi.c.136 : anak melahirkan berhasil : PID : 6925

Jika Anda mendapatkan \” anak melahirkan berhasil : PID : \” Proses php Bisa mulai berhasil. Anda harus melihat mereka dalam daftar proses Anda :

  $ Ps ax | grep php
  6925 ? S 0:00 / usr / local / bin / php
  6928 ? S 0:00 / usr / local / bin / php
  …

Jumlah Proses Harus PHP_FCGI_CHILDREN + 1 . Di sini proses 6925 adalah master dari budak yang menangani pekerjaan secara paralel . Jumlah pekerja paralel dapat PHP_FCGI_CHILDREN pada bulan September . Seorang pekerja meninggal automaticly permintaan penanganan PHP PHP_FCGI_MAX_REQUESTS Bisa Memiliki kebocoran memori .

Jika Anda memulai script sebagai root akan Proses php berjalan sebagai Ekstensi pengguna dan kelompok groupId untuk menjatuhkan hak akses root. Jika Proses php akan berjalan sebagai user script seperti yang Anda mulai .

Sebagai script Mungkin dimulai dari panggung atau bahkan tidak diketahui langsung dari baris perintah membersihkan lingkungan sebelum memulai proses . ALLOWED_ENV berisi semua variabel lingkungan sekitarnya eksternal Itu harus tersedia untuk php – proses .

Sebuah patch untuk \” bibit – FCGI \” Jadi BAHWA dapat menerima konfigurasi kustom file location dapat ditemukan di sini :

http://forum.lighttpd.net/topic/446 # 1294

Patch harus diterapkan di direktori sumber kode sumber lighttpd itu . File patch adalah \” bibit – fcgi.c \” dan memerlukan kompilasi ulang dari lighty Memiliki biner dikompilasi dengan itu juga .

Hal ini diperlukan untuk menambahkan Mengikuti \” spawn – php.sh \” file :

  # # Path MUTLAK untuk PHP config
  FCGI_CONFIG = \” / path/to/php/config/php5.ini \”

setelah :

  # # Path ABSOLUTE ke biner PHP
  FCGIPROGRAM = \” / etc / lighttpd / php \”

Dan mengubah baris seperti di bagian bawah file ke:

  jika tes x $ UID = x0 , maka
    EX = \” $ $ FCGIPORT SPAWNFCGI – p f – u $ FCGIPROGRAM $ Ekstensi – g $ groupId PHP_FCGI_CHILDREN – C – x $ FCGI_CONFIG \”
  lain
    EX = \” $ $ FCGIPORT SPAWNFCGI – p – f – C $ FCGIPROGRAM PHP_FCGI_CHILDREN – x $ FCGI_CONFIG \”
  fi

Perl

Untuk Perl Anda harus menginstal modul FCGI dari CPAN .
Skeleton untuk pemberi kuasa terpencil

Fungsi dasar pemberi kuasa adalah sebagai berikut (lihat http://www.fastcgi.com/devkit/doc/fcgi-spec.html , 6.3 untuk rincian ) .

  # Sertakan
  stdlib.h
  # Sertakan
  int main ( ) {
    char * p ;

    while ( FCGI_Accept ( ) > = 0 ) {
      / * Tunggu permintaan fastcgi Kuasa * /

      printf ( \” Content- type: text / html \\ r \\ n \” ) ;

      if ( ( p = getenv ( \” QUERY_STRING \” ) ) == NULL ) | |
           )
           printf ( \” Status : 403 Forbidden \\ r \\ n \\ r \\ n \” ) ;

      lain printf ( \” \\ r \\ n \” ) ;
        / * Default adalah 200 Status – memungkinkan akses * /
    }

    return 0 ;
  }

Hal ini dimungkinkan untuk menggunakan variabel lain yang disediakan oleh antarmuka FastCGI untuk otorisasi cek. Berikut adalah contoh saja .
Pemecahan Masalah

fastcgi.debug Harus diaktifkan untuk pemecahan masalah .

Jika Anda mendapatkan :

  ( Fcgi.c.274 ) menghubungkan tertunda 8
  ( Fcgi.c.289 ) menghubungkan berhasil 8
  ( Fcgi.c.745 ) terduga end – of-file ( Mungkin fastcgi tersebut
     Proses meninggal ) : 8

proses fastcgi menerima koneksi tetapi ditutup segera . Hal ini terjadi di mana jika FCGI_WEB_SERVER_ADDRS tidak termasuk koneksi host Anda berasal dari .

Jika Anda mendapatkan :

  ( Fcgi.c.274 ) menghubungkan tertunda 7
  ( Fcgi.c.1107 ) error : close terduga koneksi FastCGI
     untuk / peterp/seite1.php (tidak ada proses FastCGI pada host / port ? )
  ( Fcgi.c.1015 ) pintu darurat : FastCGI : koneksi – fd : 5
     FCGI – fd 7

proses FastCGI tidak berjalan pada host / port Anda koneksi ke . Periksa konfigurasi Anda .

Jika Anda mendapatkan ::

  ( Fcgi.c.274 ) menghubungkan tertunda 7
  ( Fcgi.c.289 ) menghubungkan berhasil 7

semuanya baik-baik saja . Connect ( ) panggilan ditunda hanya sedikit dan benar-benar standar.

Lighttpd chroot , evhost dan FastCGI non – chroot

Jika Anda mencoba untuk menggunakan FastCGI non – chroot dikombinasikan dengan evhost dalam lighttpd chroot , Anda tampaknya beruntung . Untuk benar mendukung konfigurasi ini , lighttpd perlu tambahkan path chroot sebelum nya document root fastcgi Ketika membuat permintaan . The \” docroot \” pilihan dapat melakukan hal ini statis (yaitu , Bila tidak menggunakan evhost ) , tetapi tidak untuk beberapa host . Juga lihat # 1816 tentang hal ini .

Docs : ModProxyCore akan mendukung konfigurasi ini di lighttpd 1.5 .

C / C + + FastCGI pada lightty bernama socket

Ingat bernama soket operasi pencarian dilakukan melalui entri / proc di Linux sehingga Itu Anda perlu me-mount proc – perangkat di dalam setiap webserver chroot di mana Anda ingin menggunakan nama soket , dalam sistem operasi lain juga entri / dev yang diperlukan diperlukan ( kebanyakan instalasi akan memerlukan chroot ke / dev / null minimal ) . The lightty mod_fastcgi.c akan pra – terbuka soket server aplikasi pada file descriptor 0 ( mencari FCGI_LISTENSOCK_FILENO di \” fastcgi.h \” ) Sudah akan melalui soket ( ) / bind ( ) / mendengarkan ( ) siklus untuk soket AF_UNIX – sehingga dalam Program FastCGI Anda, Anda hanya perlu menjalankan menerima ( ) . Untuk kasus multithreaded Anda butuhkan untuk menjalankan FCGX_Init satu kali dan untuk membuat sebanyak yang Anda inginkan menangani FCGX_Request .

/ / Gcc – lfcgi -I/usr/include/fastcgi testfastcgi.c – o test.fastcgi
stdlib.h
# Sertakan string.h
# Sertakan
# Sertakan
# Sertakan
# Tentukan LISTENSOCK_FILENO 0
# Tentukan LISTENSOCK_FLAGS 0
int main ( int argc , char ** argv ) {
  openlog ( \” testfastcgi \” LOG_CONS | LOG_NDELAY , LOG_USER ) ;
  int err = FCGX_Init ( ) / * panggilan sebelum Terima dalam aplikasi multithreaded * /
  if ( err ) { syslog ( LOG_INFO , \” FCGX_Init gagal : % d \” , err ) return 1 ; }
  Cgi FCGX_Request ;
  err = FCGX_InitRequest ( & cgi , LISTENSOCK_FILENO , LISTENSOCK_FLAGS ) ;
  if ( err ) { syslog ( LOG_INFO , \” FCGX_InitRequest gagal : % d \” , err ) return 2 ; }

  while ( 1 ) {
    err = FCGX_Accept_r ( & cgi ) ;
    if ( err ) { syslog ( LOG_INFO , \” FCGX_Accept_r berhenti : % d \” , err ) break; }
    Char ** envp ;
    int size = 200 ;
    for ( envp = cgi.envp ; * envp ; + + envp ) size + = strlen ( * envp ) + 11 ;
    Char hasil * = ( char * ) alloca ( size ) ;
    strcpy ( hasil , \” Status : 200 OK \\ r \\ nContent -Type : text / html \\ r \\ n \\ r \\ n \” ) ;
    strcat ( hasil , \” testcgi

    \\ r \\ n \” ) ;

        for ( envp = cgi.envp ; * envp ; envp + + ) {
          strcat ( hasil , \”

  • \” ) ;
          strcat ( hasil , * envp ) ;
          strcat ( hasil , \”
  • \\ r \\ n \” ) ;
        }

        strcat ( hasil , \”

\\ r \\ n \” ) ;
    FCGX_PutStr ( hasil , strlen ( hasil) , cgi.out ) ;
  }

  return 0 ;
}

dan catatan konfigurasi

  fastcgi.server = (
    \” / Login\” = > (
      \” Test.fastcgi.handler \” = > (
        \” Socket \” = > socket_dir + \” test.fastcgi.socket \”
        \” Check- local \” = > \” menonaktifkan\”
        \” Bin – path \” = > \” / usr / bin / test.fastcgi \”
        \” Max – procs \” = > 30 ,
      )
    )
  )

Python FastCGI pada lighty dengan flup

Unduh flup http://trac.saddi.com/flup

Konfigurasi :

fastcgi.server = (
    . \” Py \” = >
    (
        \” Python – FCGI \” = >
        (
         \” Socket \” = > socket_dir + \” fastcgi.python.socket \”
         \” Bin – path \” = > \” test.py \”
         \” Check- local \” = > \” menonaktifkan\”
         \” Max – procs \” = > 1 ,
        )
    ) )

test.py :

# / usr/bin/python2.5
def myapp ( lingkungan , start_response ) :
    start_response ( \’200 OK \’ , [ ( \’ Content -Type \’ , \’ text / plain \’ ) ] )
    kembali [ \’ Hello World ! \\ n \’ ]

jika __ name__ == \’ __main__ \’ :
    impor dari WSGIServer flup.server.fcgi
    WSGIServer ( myapp ) . Run ( )
   
   

http://adf.ly/biRaH     http://adf.ly/biSP8

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.