Portál AbcLinuxu, 8. května 2025 15:53
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ěď :)
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í...
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ěď :)
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.
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).
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
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 :)
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é
Velmi smutné. Vpodstatě celý důvod, proč se tady an to ptám. Jen mě mrzí, že pořád nikdo neodpovídá.
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 :(
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ěď :)
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/cgiDoufám, že je to srozumitelné.
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.