openbase_dir a includovani – chyby
- Filip111
- Člen | 244
Ahoj, už nějakou dobu se peru s nastavením openbase_dir na VPS (CentOS
6.3. + ISPConfig),
hledal jsem a zkoušel všechno možný.
Narazil jsem na to při includování vygenerovaných šablon
z cache/_Nette.FileTemplate – web funguje, ale log se plní s každým
requestem.
Když jsem si na produkci zapnul laděnku, začalo to házet chyby skoro
všude, například.
soubor Nette/Diagnostics/Bar.php
má v sobě include šablony
require __DIR__ . '/templates/bar.phtml';
Končí to chybou:
/var/www/clients/client1/web8/libs/Nette/Diagnostics Warning: require(): open_basedir restriction in effect. File() is not within the allowed path(s): (/var/www/clients/client1/web8:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin) in /var/www/clients/client1/web8/libs/Nette/Diagnostics/Bar.php on line 77
Nastavení openbase_dir je vidět už z chybové hlášky – mám tam
adresář /var/www/clients/client1/web8
a v něm jsou pak adresáře app, libs/Nette/…, temp, log apod.
Tzn. šablona, kterou se snaží Bar.php includovat je v adresářovém stromu /var/www/clients/client1/web8/libs/Nette/Diagnostics/templates/bar.phtml a mělo by to fungovat…ale nefunguje.
Předpokládám, že když se mi podaří vyřešit tenhle celkem triviální případ, vyřeší se i další zamotanější includy volané z _Nette.FileTemplate.
Díky moc.
Editoval Filip111 (25. 1. 2013 14:00)
- thorewi
- Člen | 84
doporucuji open_basedir nepouzivat je to dost performance killer (na malo navstevnovanych webech to nevadi ale na webech s navstevnosti 50k denne uz je to hodne signifikantni)… existuje rada jinych zpusobu jak to resit… pokud pouzivas ispconfig tak tam je to naprosto zbytecne – ispconfig pouziva fastcgi pripadne php-fpm a kazdy web je tak spousten s vlastnimi pravy (narozdil od mod-php)… open_basedir muzes vypnout tak, ze napises v ispconfigu do teto direktivy „none“
- thorewi
- Člen | 84
presneji receno – je to performance killer ve zpusobu jakym to ispconfig poziva tzn ze tam mas hrozne moc cest a pokud si nakonec jeste pridas nejake svoje sdielene knihovny tak je vymalovano…
k tvemu problemu – a co mas v include_path v php.ini? ja doporucuji tam mit jen „.“
- Filip111
- Člen | 244
Ahoj, díky za odpovědi.
Vypnout openbase_dir se mi moc nechce – každopádně to zkusím alespoň na
na některým webu abych zjistit rozdíl ve výkonu. Pořád je to ale takový
řešení napůl – sice má fastCGI na každej web jinýho uživatele, ale
i tam v rámci webu jsou soubory, kam by scripty správně lézt neměly.
Nicméně pro ty moje weby a aplikace, co tam běží by se zase tolik
nestalo.
include path v php.ini je zakomentovaná a nikde jsem nenašel, že by tam
ispc někde něco přidával, takže nevím.
Jako webserver používám fastCGI – dokud to funguje, tak nemám důvod
přecházet na nginx. Resp. nejsem tak dobrej správce abych rozvrtal živej
server, nemuselo by to dobře dopadnout. Možná až budu rozbíhat další, tak
dokud bude čistej, můžu to zkusit.
Ještě jsem koukal, že ISPC mají php-fpm jako novou volbu od verze 3.0.5.,
tak počkám až ji uvolní, jestli se přímo doinstaluje nginx a php-fpm nebo
se jen objeví nová/nefunkční položka v administraci.
- Filip111
- Člen | 244
Zkoušel jsem malý benchmark – když vypnu openbase_dir a je to o 30%
rychlejší.
ab -n 500 -c 5 http://domena.tld
ps.: i po vypnutí openbase_sir trvá jeden request průměrně 113ms, což je docela dost.
- thorewi
- Člen | 84
no praveze kdyz je include_path zakomentovana tak je tam pak defaultne to co vidis v phpinfo() tzn nejaky pear se sdilenyma knihovnama apod. kam se to snazi vlezt pri includu, ale nemas to povolene v tom open_basediru… proto si myslim ze kdyz to odkomentujes a nechas tam jen „.“ tak by to mohlo vyresit nejake problemy s open_basedirem (ja si pamatuju ze mi to kdysi pomohlo, od te doby to tak nastavuju)…
jak jsem rikal, open_basedir je killer…
s nejakou lepsi konfiguraci apache ti uz ti asi nepomuzu, pouzivam nginx uz dlouho a ohledne apache jsem vse zapomnel :/ Napadlo me – mas zaply deflate/gzip?
Editoval thorewi (27. 1. 2013 13:44)
- Filip111
- Člen | 244
Nastavil jsem include_path na tečku a z v phpinfo už tedy není pear a
další. Nicméně se tím vůbec nic nezměnilo.
V phpinfo je Stream Filter support zlib.inflate, zlib.deflate,
ale zlib.output_compression je Off, takže asi vypnutý.
Zatím mi nejvíc pomohlo vypnutí open_basedir :)
Možná ale začínám tušit, v čem by mohl být problém – mám dost složitě řešený dohledávání layoutu ve formatLayoutTemplateFiles se spoustou dvojtečkových cest, takže to možná občas kouká kam nemá.
- Filip111
- Člen | 244
Zdá se, že za to může nějaký bug v eAcceleratoru
http://www.birknet.eu/…ps-u-wedosu/
http://webtrh.cz/…eaccelerator
Zkusil jsem ho vypnout a problém s open_basedir přestal. Performance, se
zhoršil jen nevýrazně – ze 113ms na request je to teď 125ms.
Je možný, že má eAccelerator tam malý vliv na výkon?
- thorewi
- Člen | 84
misto eacceleratoru muzes zkusit Xcache nebo ja doporucuji APC… ty cachovaci mechanismy maji samozrejme hlavni vyznam u hodne navstevovanych webu, protoze si tam muzes cachovat i vystupy z db, rozpsarovane veci atd. a kdyz to vynasobis treba 50k navstevnosti tak je to obrovsky rozdil… cili to neni jen o tom opcode cachovani…
- thorewi
- Člen | 84
jeste poradim – pokud se rozhodnes pro APC, vypni pred instalaci apache, php a souvisejici procesy… ja kdyz to instalova s bezicim nginxem a php-fpm tak se vsechno nainstalovalo bez problemu ale nahodne to pak padalo, tato chyba zmizla po reinstalaci s vypnutymy vyse zminenymi procesy… mozna ti tato rada usetri nejake trapeni :)
- Filip111
- Člen | 244
Zkusil jsem jít tou „nejjednodušší“ cestou a udělal aktualizaci
eAcceleratoru podle výše uvedených odkazů.
Bohužel když začnu používat eaccelerator, tak skončí start httpd
chybou:
eAccelerator: Unable to change cache directory /var/cache/php-eaccelerator
permissions
Nenarazil jste na to někdo? (vím, že už to sem snad ani na tenhle server
nepatří, ale je tu spousta chytrých lidí :)
Adresáře mají oprávnění a uživatele:
php-eaccelerator 0777 apache
cache 0755 root
var 0755 root
Na netu jsem nic moc nenašel, když změním oprávnění adr. cache na 0777, tak se nic nezmění. Nechápu co se mu nelíbí.
Editoval Filip111 (28. 1. 2013 15:32)
- Filip111
- Člen | 244
Díky za trpělivost a odpovědi, já už na to kašlu.
Zkoušel jsem měnit oprávnění, přesunout temp do /tmp/eaccelerator, měnil
jsem vlastníka adresáře, dokonce jsem nastavil /var/cache na 777 a nechal,
aby si eaccelerator sam vytvořil adresář.
Po tom si ho sám vytvořil, padnul zase na chybu že nemůže změnit
oprávnění a chcípnul.
Jinak jsem našel i ve zdrojákách eacceleratoru co tam dělá
https://github.com/…ccelerator.c#…
(nerozumím tomu na 100 procent, ale chápu to tak, že chce mít oprávnění
777 a pokud ho nemá, zkouší to sám)
Až zase budu chtít něco rozbít, zkusím instalaci APC.