Acest lucru implică faptul că programul FastCGI rulează cu Apache server web și a alerga cu lighttpd și vice-versa.
FastCGI elimină multe limitări ale programelor CGI. Programele CGI, problema este că acestea trebuie să fie repornit web-server pentru fiecare cerere, ceea ce duce la o scădere a productivității.
FastCGI înlătură această limitare menținerea procesului de funcționare și care trece cererile care se execută în mod constant proces. Acest lucru face posibil să nu petreacă timp pentru a crea (fork ()) noilor procese.
În timp ce programele CGI sunt conectate la server prin intermediul pipe'y, procese FastCGI folosesc Unix-Domain-Sockets sau TCP / IP pentru comunicarea cu serverul. Acesta are următoarele avantaje față de programele CGI conventionale: programe FastCGI pot fi lansate nu numai pe același server, dar, de asemenea, oriunde în rețea
lighttpd include distribuitor intern de încărcare FastCGI, care poate fi utilizat pentru distribuirea către mai multe servere FastCGI. Spre deosebire de alte soluții decât proces FastCGI ar trebui să fie în cluster, mai degrabă decât un web-server. Acest lucru permite ca procesul de utilizare FastCGI rezursov mai mare decât, de exemplu, încărcare-echilibrist + apache + mod_php.
Dacă compara FastCGI cu apache + mod_php ar trebui să acorde o atenție faptului că FastCGI oferă siguranță suplimentară, cum să executați procesul FastCGI sub altul decât serverul de web al utilizatorului utilizator, și poate fi, de asemenea, în chroot'a chroot'e diferit de web-server .
sprijin FastCGI în lighttod furnizate prin intermediul modulului fastcgi (mod_fastcgi) care are 2 opțiuni în fișierul de configurare:
Valoarea fastcgi.debug 0-65535 pentru emiterea modulul de nivel de depanare FastCGI. În acest moment, suntem doar 0 sau 1. Aliniați 1 pentru a porni depanarea și 0 pentru a dezactiva. fastcgi.server
Conform modulului în cazul în care pentru a trimite apeluri FastCGI. Fiecare extensie de fișier poate trimite propriul server FastCGI. De echilibrare a sarcinii este pusă în aplicare prin specificarea numărului de servere FastCGI pentru o prelungire.
Structura secțiunii fastcgi.server:
fișier extensie sau prefix (în cazul în care începe cu un „/“)
Modul de protocol FastCGI. Implicit este „responder“, au, de asemenea, modul „authorizer“.
este opțională și poate fi inclusă „activați“ (implicit) sau „dezactiva“. Dacă activați serverul verifică mai întâi fișierul local, în directorul server.document-rădăcină și returnează un 404 (nu a fost găsită), în cazul în care nu există un astfel de fișier. Dacă este dezactivată, serverul transmite cererea la interfața FastCGI fără această verificare.
Dacă specificați un coș de-cale:
extensii multiple pentru aceeași gazdă
EXEMPLU prefixat:
Exemplu pentru modul „authorizer“:
Rețineți că, în cazul în care „docroot“ este definit, atunci valoarea sa va fi utilizată în DOCUMENT_ROOT variabilă și serverul SCRIPT_FILENAME FastCGI.
FastCGI plugin oferă partajarea de încărcare automată între mai multe servere FastCGI.
Pentru a înțelege modul în care echilibrarea sarcinii, puteți activa opțiunea fastcgi.debug și pentru a obține de ieșire ca aceasta:
Această ieșire prezintă o multitudine FastCGI porodeny pe mașina locală. Următoarea explicație este valabilă și pentru conexiunile la distanță.
- IP, port, unix-socket (în acest caz este gol)
- este-locală, indicatorul (0 - nu este expus, 1 - funcționare.)
- compus activ (încărcare)
- PID
După cum puteți vedea o listă cu tot timpul comandate de câmp zagruzuki
Atunci când noi conexiuni ale cererii, selectează primul pointer la procesul FastCGI (cel cu cea mai mică sarcină), valoarea de sarcină este incrementat cu 1 (luat proc.) Și lista este sortată din nou.
Dacă solicitarea FastCGI se termină sau conexiunea este întreruptă, FastCGI proc de încărcare scade cu 1, iar lista este sortată din nou (proc de eliberare.)
Acest comportament are un cod mic, foarte eficient, și vă permite să utilizați fastcgi-server ravnozagruzhenno, chiar dacă acestea au diferite CPU.
Deoarece 1.3.8 lighttpd poate crea prostsessy, la cerere, în cazul în care bin-cale, determinată și procese FastCGI rula la nivel local.
Dacă doriți să fi lansat cel puțin un proces FastCGI și mai multe informații în toate interogările, puteți utiliza min-max-procs și procs.
Noul proces este pornit imediat ce numărul mediu de cereri de așteptare pentru un singur proces de prelucrare depășește max-sarcina-pe-proc.
Parametrul Idle-timeout determină cât de mult FastCGI-proces trebuie să se aștepte o nouă cerere înainte de activitatea sa perdea
Spawning Adaptive este încă o caracteristică nouă, și se poate comporta instabil. Aici sunt enumerate mai multe posibilități cum de a controla crearea de noi procese:
„Max-încărcare-pe-proc“ => 1 în cazul în care acesta lucreaza pentru tine, atunci totul este bine.
Dacă nu pune min-max ==-PROC procs.
Pentru PHP, puteți utiliza, de asemenea:
Acest lucru va crea un socket și permite PHP pentru a crea 384 de proces.
Dacă nu doriți să permiteți să gestioneze procesele FastCGI lighttpd, scoateți-bin calea și utilizați spawn-fcgi pentru a crea proces FastCGI în sine
Dacă aveți deja un PHP de lucru pe un web-server, executați un script scurt care conține pur și simplu
si uita-te la linia care conține apelul pentru a configura. Le puteți utiliza ca bază pentru compilarea.
Ar trebui să eliminați opțiunea---with apxs. --with-apxs2 și cele care sunt folosite pentru a compila cu suport pentru Apache. Adăugați următoarele trei opțiuni pentru a compila PHP cu suport pentru FastCGI:
După compilarea și instralyatsii verifica dacă PHP acceptă FastCGI, performante:
Observații (cgi-fcgi).
Este important ca php.ini conține:
În caz contrar, PHP_SELF nu va lua valoarea corectă.
Începând cu versiunea 1.3.6 lighttpd se poate crea procese FastCGI, dacă este necesar:
PHP oferă două variabile speciale de mediu care controlează numărul de procese muncitorilor care rulează sub Controlorii procesului de supraveghere (PHP_FCGI_CHILDREN) și numărul de cereri pe care un flux de lucru va procesa până la finalizare.
Pentru a îmbunătăți bezopastnost procesele care rulează, ai nevoie doar pentru a trece variabilele de mediu necesare pentru procesul de FastCGI.
Crearea unui proces FastCGI direct în web-server are următoarele dezavantaje
- proces FastCGI poate fi pornit doar la nivel local
- aveți drepturi și că web-server
- Ea are o stransa basedir ca web-server
De îndată ce începeți să utilizați un server FastCGI separat pentru a elimina sarcina de pe web-server, puteți controla procesul de programe FastCGI externe, cum ar fi spawn-fcgi.
spawn-fcgi folosit pentru a rula procesul de FastCGI în mediul lor, să-l pună user-id, id-grup și de a schimba directorul rădăcină (chroot).
Pentru mai mult confort, ar trebui să fie ispolzvat script wrapper pentru a avea grija de toate opțiunile. Acest script este inclus în compoziția lighttpd, - spawn-php.sh.
Script-ul utilizează un set de variabile de configurare pentru care trebuie să acorde atenție:
După ce ați specificat valorile de care aveți nevoie, puteți rula spawn-php.sh:
Dacă vedeți un „copil a dat naștere cu succes: PID:“ php înseamnă procesul se execută cu succes. Ar trebui să le vezi în lista de procese:
Numărul de procese să fie PHP_FCGI_CHILDREN + 1. În acest caz, procesul 6925 este un slave'ov maestru care lucrează în paralel. Numărul de procese lucrătorilor specificate în PHP_FCGI_CHILDREN. Fluxul de lucru se închide automat după interogarea PHP_FCGI_MAX_REQUESTS, deoarece scurgere de memorie pot să apară în PHP.
Dacă executați scriptul ca root, procesele de PHP va lucra cu USERID de utilizator și de grup groupid. În caz contrar, procesele de PHP rula cu privilegiile utilizatorului care a fugit scenariul.
Deoarece script-ul poate fi rulat cu nivelul de declanșare nesigur, sau chiar direct din linia de comandă, se șterge variabilele de mediu înainte de a începe procesul. ALLOWED_ENV conține toate variabilele de mediu extern, care ar trebui să fie disponibile php-proces.
Pentru Perl, ar trebui să instalați modulul FCGI cu CPAN.