openbase_dir a includovani – chyby

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip111
Člen | 244
+
0
-

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
+
0
-

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
+
0
-

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 „.“

thorewi
Člen | 84
+
0
-

a jinak z tveho prispevku neni poznat, co za webserver pouzivas, ale ja doporucuji kombinaci nginx + php-fpm + APC… i ispconfig na tutu kombinaci presel tzn najdes na to spoustu navodu… pokud to takto pouzivas tak tento prispevek ignoruj :)

Filip111
Člen | 244
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

thorewi
Člen | 84
+
0
-

tady ti asi neporadim, ale treba slozka /var/vmail musela mit vzdy prave 700 aby fungovala spravne (jakakoliv vyssi opravneni skoncili taky chybou), tak zkusit jeste opacnou cestu a nastavit tam 700 ?

Filip111
Člen | 244
+
0
-

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.

thorewi
Člen | 84
+
0
-

instalace APC je jednoducha, jen apt-get install php-apc a je hotovo… pak jen v apc.ini nastavit konfiguraci…