1. Home
  2. Tehnisks
  3. ZFPM (Zone FastCGI procesu pārvaldnieks)
  1. Home
  2. Apache
  3. ZFPM (Zone FastCGI procesu pārvaldnieks)

ZFPM (Zone FastCGI procesu pārvaldnieks)

Pārskats

ZFPM (Zone FastCGI Process Manager) ir Zone Media izstrādāts programmatūras produkts, kura misija ir nodrošināt automatizētu, mērogojamu un drošu veidu, kā virtuālo serveru pārvaldībā darbināt uz FastCGI balstītas lietotnes.

ZFPM primāri ir procesu pārvaldnieks PHP lietotnēm, taču tas var apkalpot arī citas FastCGI lietotnes (piem., Ruby On Rails, Django).

Tā kā koplietojamā vidē drošība ir mūsu pirmā prioritāte, nav lietderīgi darbināt lietotnes ar tīmekļa servera privilēģijām, kā tas ir mod_php (DSO) gadījumā. PHP FastCGI režīmā ļauj katram virtuālajam serverim darbināt savas lietotnes ar lietotāja privilēģijām.

Uz ZFPM balstītajai sistēmai ir divi galvenie komponenti:

  • ZFPM – FastCGI procesu pārvaldnieks
  • mod_zfpm – Apache2 modulis FastCGI vaicājumiem – optimizēts tieši ZFPM

mod_zfpm uzdevums ir nosūtīt ienākošo HTTP pieprasījumu uz ZFPM, kas, ja nepieciešams, palaidīs un pārsūtīs to uz pareizo PHP-FCGI lietotni. PHP-FCGI ģenerē atbildi (tīmekļa lapu) un nosūta to atpakaļ uz ZFPM, kas savukārt nosūta to uz mod_zfpm un visbeidzot klientam, kurš iniciēja pieprasījumu. Datu pārsūtīšana starp visiem trim komponentiem (mod_zfpm <-> ZFPM <-> PHP-FCGI) notiek, izmantojot FastCGI protokolu.

alternatīvu ZFPM var izmantot Apache moduļus mod_fcgid un mod_fastcgi, kuru procesu pārvaldnieki ir stingri integrēti Apache tīmekļa servera procesā. Tāpēc būtiska atšķirība no ZFPM ir tā, ka ZFPM pārvalda visus FCGI procesus pilnībā atsevišķi no Apache tīmekļa servera. Tas nozīmē, ka tīmekļa servera programmatūras sākotnējā ielāde nepārtrauc un tieši neietekmē darbojošos PHP skriptus. Skripti var pabeigt darbu bez pārtraukumiem neatkarīgi no tā, ka, piemēram, darba laikā ir mainīta tīmekļa servera konfigurācija un programmatūra ir inicializēta. Tāpat tīmekļa servera sākotnējās ielādes laikā netiek apturēti/palaisti visi PHP-FCGI procesi.

PHP-FCGI procesu skaits noslogotā serverī var sasniegt tūkstošus, un būtu ārkārtīgi neracionāli un neērti ielādēt tik lielu procesu skaitu tikai nelielu izmaiņu dēļ tīmekļa servera konfigurācijā.

Tā kā ZFPM ir universāls rīks visam, kas runā FastCGI, nav problēmu vienlaikus darbināt lietotnes, kas balstītas uz dažādām PHP versijām, virtuālajos serveros. Šeit var minēt vēl vienu alternatīvu ZFPM – PHP-FPM, kas ir tikai PHP specifiska FastCGI sistēma. Tomēr tās galvenais trūkums ir sarežģītība droši pārvaldīt PHP-FCGI procesus, īpaši koplietojamā vidē, kur vienā fiziskajā serverī var būt tūkstošiem dažādu virtuālo serveru, kuriem jāspēj pēc vajadzības darbināt dažādas PHP versijas.

Biežāko kļūdu apraksti

Lai gan FastCGI ir viens no ātrākajiem un drošākajiem veidiem, kā koplietojamā vidē darbināt PHP, tas (atšķirībā no vienkāršā mod_php) ir diezgan sarežģīta vaicājumu apstrādes ķēde, kurā kļūmes dažādos komponentos var radīt dažādus, reizēm grūti saprotamus ziņojumus Apache error_log.

Zemāk ir daži no biežāk sastopamajiem ZFPM kļūdu ziņojumiem un daži ieteikumi, kā sākt meklēt kļūdas cēloni.

Connection to FastCGI was reset by peer during reading response. Check your FastCGI application log. Increase LogLevel verbosity to 'info' for additional protocol info.

Pirmais, kas jādara, ir pārbaudīt savas lietotnes žurnālfailu, jo, visticamāk, lietotne ir negaidīti pārstājusi darboties un aizvērusi FastCGI savienojumu. Klients saņems HTTP 500 kļūdas ziņojumu. Ja nevari pats noteikt cēloni, sazinies ar tehnisko atbalstu un noskaidro, kā atkārtot kļūdu.


stderr: Timeout (30s) exceeded while waiting for FCGI process to become available

Ir sasniegts šī virtuālā resursdatora PHP-FCGI procesu limits paralēlu pieprasījumu apstrādei, un pieprasījums vismaz 30 sekundes ir gaidījis rindā, līdz atbrīvosies kāds process, bet bez rezultāta. Klients saņem HTTP 500 kļūdas ziņojumu. Visticamāk, vietne ir būtiski noslogota, tāpēc, ja problēma atkārtojas bieži, ieteicams risinājumu meklēt kopā ar tehnisko atbalstu.


stderr: Timeout (900s) exceeded while reading from socket (application)

Lietotne ir apstrādājusi pieprasījumu vismaz 15 minūtes, nenosūtot atbildi. Skriptam laiku pa laikam vajadzētu izvadīt kādu informāciju, pretējā gadījumā procesu pārvaldnieks pieņems, ka skripts kaut kur ir “iestrēdzis”, un piespiedu kārtā to pārtrauks. Ir arī vērts atzīmēt, ka maksimālais tīmekļa pieprasījuma apstrādes laiks ir 86400 sekundes, un, ja tas tiek sasniegts, skripts tiks pārtraukts neatkarīgi no tā, vai tas kaut ko izvada. Ja HTTP galvenes jau ir nosūtītas, atbilde tiks pārtraukta pusceļā. Ja nav nosūtītas, klients saņems HTTP 500 kļūdas ziņojumu.


stderr: Timeout (150s) exceeded while reading from socket (server)

HTTP klients nosūta pieprasījumu pārāk lēni. Šajā piemērā tas 150 sekunžu laikā nav spējis nosūtīt nevienu jaunu baitu. Procesu pārvaldnieks pārtrauc gaidīšanu, un klients saņem HTTP 500 kļūdas ziņojumu.


stderr: <Error reported by PHP script>

Kļūdu ziņojumi no skriptiem, kurus pats skripts neapstrādā, tiek nodoti no PHP-FCGI uz tīmekļa serveri. Šādi kļūdu ziņojumi tiek parādīti tieši kļūdu žurnālā.

Updated on 23. Apr 2024
Was this article helpful?

Related Articles