Portál AbcLinuxu, 26. dubna 2024 17:19


Dotaz: Spouštění PHP pod jeho UID:GID - Apache

14.1.2007 19:23 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Spouštění PHP pod jeho UID:GID - Apache
Přečteno: 2725×
Odpovědět | Admin

Ahoj,
Potřeboval bych poradit s konfigurací Apache. Rád bych, aby PHP běžely pod svým UID a GID a zároveň chci používat dynamické virtuální hostitele (mass hosting), tedy situace, kdy nemám pro každého hostitele záznam <VirtualHost> a nemůžu to tedy jednoduše udělat pomocí Apache MPM-Peruser (a direktivy ServerEnvironment). Jediné funkční nastevní bylo pomocí suPHP, které ale funguje přes CGI a má proti mod_php asi desetinásobně menší výkon. FastCGI s suEXEC mě taky napadlo, ale nenašel jsem přesně návod, jak udělat, aby si wrapper php sám zjistil, pod jakým UID:GID má běžet a FastCGI PHP bylo stejně asi dvakrát tak pomalé než mod_php. Moje otázka tedy zní: lze nějak zkloubit mass hosting s MPM-Peruser? Tedy něco jako ServerEnvironment %0 %0? Mě se to nepodařilo, ale konfiguraci Apache nerozumím natolik, abych mohl říct, že to není možné. Pokud je tu někdo, kdo Apachi opravdu rozumí a ví, že to možné není, ať to prosím napíše - nebudu už aspoň muset hldat. Ještě poznámka na závěr - pokud tuto možnost přináší Apache 2.2 (ačkoliv v New Features jsem nic takového nenašel), není to problém. Kvůli tomuhle bych ho klidně nasadil, i když je teprve ve vývoji. Stejně tak, pokud víte o jiném webserveru, který by si uměl poradit s PHP (třeba lighttpd přes FastCGI) a tohle uměl, taky mě to určitě zajímá. Díky všem, už jsem nad tím strávil asi tři dny a rád bych znal závěrečnou odpověď :)

Nástroje: Začni sledovat (4) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.1.2007 19:50 Zdvori | skóre: 9
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Odpovědět | | Sbalit | Link | Blokovat | Admin
Osobně používam FastCGI a SuPHP a ono desetinásobné snížení výkonu nepociťuji. Můžete doložit nějkým měřením. Osobně by mě tato problematika také zajímala.

Já osobně jiné řešení nenašel.

PS:Výhodu v SuPHP vidím také v možném dodatečném zabezpečení které nabízí...

14.1.2007 19:57 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

FastCGI a suPHP? Tohle nastavení jsem nidke neviděl a podle toho, co jsem našel na mailing listu suPHP to prý ani nejde. Mohl byste prosím zveřejnit svá nastavení? Jinak to měřením můžu doložit, akorát se mi ho nechce dělat znova :D Použil jsem ab2 benchmark a jednoduchou phpinfo(); stránku, testoval jsem na 1000 požadavků, maximálně vedle sebe jich běželo deset (ab2 -n 1000 -c 10 [adresa_serveru]) a mod_PHP dosahoval asi 200 požadavků/s, PHP/FastCGI asi 130 požadavků/s a suPHP asi 20 požadavků/s. Pokud byste z těch měření dokázal vyčíst něco víc, kdybych je postnul celá, klidně to udělám, ale vážně tam nic zázračného nebylo. Server mám v 100Mbit LAN a největší rychlost (s mod_php) byla asi 8000kB/s, takže sítí to myslím nebude.

Díky za odpověď :)

14.1.2007 20:16 Zdvori | skóre: 9
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Nastavení jsem prakticky neměnil a v phpInfo mám:

Server API CGI/FastCGI

Tak jen doufám, že to není jen moje chyba při odečítání hodnoty.

www-apache/mod_suphp-0.6.2 USE="checkpath mode-owner -mode-force -mode-paranoid"

Můžete poslat script na měření? ...rád bych se ujistil zda opravdu běží FastCGI.

14.1.2007 20:47 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

Prosím tykat :) Pokud máte nainstalovaný Apache-2*, tak ten benchmark máte, je to binárka ab2. A to Server API - říká jenom to, že PHP bylo zkompilováno s podporou CGI i FCGI (můžete se ujistit tím, že spustíte php-cgi -v - vypíše, že má podporu pro oboje), ne že ho i využívá, tzn. že vám běží jenom jako CGI. Mimochodem, vzhledem k tomu, že máte Gentoo (já též), tak se můžete sám ujistit, že mod_suphp nemá mod_fcgid ani fcgi jako závislost, takže těžko může takto běžet (vzhledem k tomu, že je asi nemáte ani nainstalované, jak předpokládám).

14.1.2007 22:33 Zdvori | skóre: 9
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Když tykat tak oboustraně :)

Až bude čas pokusně přepsat konfiguraci serveru tak to otestuju.

Existuje ještě nějaké řešení pro:

Spouštění scriptů pod vlastníkem
Možnost současného běhu php4 a php5
Ukládání logů pro každou doménu zvlášť
Základní zabezpečení v porovnávání vlastníků souborů a document root atd...

Jediné co jsem našel, že splňuje požadavky je kombinace VirtualHost a SuPHP

15.1.2007 09:56 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

Možnost současného běhu PHP4 a PHP5 - je hezký návod na stránkách Gentoo. Gentoo pro tohle má přímo USE flag concurrentmodphp (umožňuje provozovat obě verze PHP jako mod_php), ten zatím ještě nefunguje dokonale, ale s troškou pomoci na fórech by to šlo. Jinak určitě funkční řešení a asi nejrychlejší (kromě concurrentmodphp) je jedna verze PHP jako mod_php a druhá jako FastCGI.

Další okomentuju (a ano, je to proveditelné a vzhledem k tomu, že to budu dávat na svůj server. tak to doplním i do článku v blogu), teď běžím do hodiny :)

15.1.2007 10:26 Zdvori | skóre: 9
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Tak moje měření:

phpinfo() - 1,5GB RAM; Pentium M 1,86GHz; PHP5-mod_php = 240.60 [#/sec]

phpinfo() - 4GB RAM; Core2Duo 2,13Ghz; PHP-suPHP+CGI = 9.67 [#/sec]

Smutné :-(

15.1.2007 13:41 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

Velmi smutné. Vpodstatě celý důvod, proč se tady an to ptám. Jen mě mrzí, že pořád nikdo neodpovídá.

15.1.2007 17:11 Zdvori | skóre: 9
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Bohuzel pochybuji jestli to ma jine reseni. To co chces asi jentak nepujde. Dynamic Virtual host jsem kdysi pouzival, ale po zavedeni pozadavku na SSL/domena, ukladani logu ke kazde domene zvlast a vlastni nastaveni php pro kazdou domenu toto reseni prestalo zvladat. Pouzil jsem tedy klasicky virtual host, kde se da vse jednoduseji nastavit. Podobne tema jsem resil v diskuzi jiz kdysi a nenaslo se moc lidi kteri by odpovedeli a neco vedeli... :-(
15.1.2007 17:20 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

Takže - s těmi logy. Pokud nepotřebujete nic moc co se týče těch dynamic virtual hostů nastavovat, můžete použít řešení založené na mod_rewrite. Našel jsem jeden návod kompletně včetně těch logů - ono to dělá jeden log a potom ho to vždycky (pomocí cronu, třeba o půlnoci) rozseká na jednotlivé logy na [nazevserveru]-YYYY-DD-MM.log a uloží do adresáře toho daného hostu. Jestli je to to, co hledáte, tak tady to je. Akorát si projděte celý ten thread, jsou tam i doplňující informace o tom, jak na to s Apachem 2.0, ten úvodní post se týká Apache 1.3. CKaždopádně to jde i nějak udělat pro mas hosting s VirtualHosty, akorát jsem nenašel přesný návod (ale myslím, že by se akorát lehce pozměnil ten rozsekávací skript). A vlastní nastavení PHP - to by taky mělo jít pomocí nějakého toho regexpu, pokud se vám ovšem nejedná o ty uživatele :(

15.1.2007 17:38 Zdvori | skóre: 9
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Rikal jsem tykat :-). Rozsekat logy by samozdrejme nebyl problem, ale uz to ma nejake spozdeni. Takhle maj uzivatele na FTP svoje realtime logy. O rozsekani se taky docela dobre do dnu postara Awstats a mam to rovnou i se statistikou :-). O ty uzivatele se mi jedna. S tim, ze bych mel VirtualHost pro kazdou domenu jsem se smiril, ma to mnohem vice moznosti. DynamicHost jsem pouzival sice s uspechem nekolik let, ale nyni je nevyhovujici. Proc se ty branis klasickym virtualHostum?
15.1.2007 17:45 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

Nejsem programátor a budu si muset napsat nějaké skripty na generování konfiguráků. A jsem líný :D a navíc - dokud se na ten vhost nikdo nepodívá, Apache o něm neví ==> teoreticky by to mělo být výkonější. Ale co už. RAm se dá dokoupit ... Už se s tím smiřuju. I tak díky za odpověď :)

14.1.2007 20:21 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Odpovědět | | Sbalit | Link | Blokovat | Admin
"..kdy nemám pro každého hostitele záznam <VirtualHost>.."

to uz preco ? je tam nejaky problem ? ako to mas teda spravene ?
14.1.2007 20:41 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache

Je to dynamický VirtualHost, tzn. že Apache se kouká do nadefinovaného adresáře a všechny podadresáře interpretuje jako VHosty. Celé se to dělá pomocí mod_vhost_alias. Asi takhle:

NameVirtualHost *:80
  <VirtualHost *:80>
    <Directory "/storage/www/hosts">
    ---nic speciálního---
    </Directory>
    <IfModule mod_vhost_alias.c>
---teď ta důležitá část. %0 je požadovaný název (třeba www.nazevwebu.cz). Jsou i další možnosti, více zde---
      VirtualDocumentRoot /storage/www/hosts/%0.0
      VirtualScriptAlias /storage/www/hosts/%0.0/cgi


Doufám, že je to srozumitelné.

5.4.2007 09:38 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: Spouštění PHP pod jeho UID:GID - Apache
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tak už jsem to vyřešil. Doufám, že to pomůže. jsou tam i odkazy na mod_vhs, na jehož stránkách jsou zase návody, jak ho rozjet s oddělenými logy. Zkrátka když si pročtet ten článek + linkovaný materiál, myslím, že vám to přinese užitečné informace.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.