Egyszer már említettem, hogy van egy ISPConfig nevű Linux web hosting control panel. Nemrég megérkezett belőle az a verzió, ami már támogatja az nginx webszervert is. Az ilyen dolgokat természetesen azonnal ki kell próbálnom. Azért elöljáróban azt el kell mondanom, hogy ez a „csomag” azért még nem olyan stabil szerintem mint az apache verzió. A php csomagokat pl. csak egy hivatalosan támogatott, de stabilnak nem tekintett repository-ból lehet feltenni. Különböző összefüggések miatt ugyanez igaz a mysql szerverre is. Persze mindig lehet kézzel is fordítani programokat, de én most azt sem tekinteném stabilnak…
Van ez a leírás a howtoforge oldalon az ISPconfig telepítésről:
http://www.howtoforge.com/perfect-server-centos-6.2-x86_64-with-nginx-ispconfig-3
ami igazából nagyon jó, szóval én csak egy két aprósággal szeretném kiegészíteni.
Gateway time out / php-fpm konfig
Azonnal belefutottam egy ilyen hibába telepítés után:
„504 Gateway Time-out”
A „Gateway” ebben az esetben a php-fpm.
Először egy WordPress oldal produkálta, de igazából a hiba nem webalkalmazás specifikus. Ugyanúgy érintett a Joomla, Drupal, Moodle, Ilias, PHPnuke és egyáltalán minden.
Az nginx error logban ilyen bejegyzések vannak:
upstream timed out (110: Connection timed out) while reading response header from upstream, client:xxxxx
Ha az ember szabvány porton üzemelteti a php-fpm-et (tehát nem linux socket-en), akkor a netstat | grep portszám ilyesmiket mutat:
tcp 0 0 localhost:46664 localhost:9000 FIN_WAIT2 –
tcp 1247 0 localhost:9000 localhost:36235 CLOSE_WAIT –
tcp 1247 0 localhost:9000 localhost:36225 CLOSE_WAIT –
tcp 9 0 localhost:9000 localhost:36202 CLOSE_WAIT 14238/php5-fpm
Miért is van ez?
Vannak php scriptek amik valamiért nem futnak le, beragadnak. Hogy miért, az nem az én szakterületem.
A legjobb megoldás elvileg a ha beírjuk ezt a php-fpm konfig fájlba:
request_terminate_timeout = 30s
request_slowlog_timeout = 20s
slowlog = /var/log/php-fpm/php-fpm-slow-{fpm_user}.log
A request_terminate_timeout időt elvileg ugyanannyira vagy egy picit többre kell venni mint ami a php.ini-ben a max_execution_time paraméterben van beállítva.
Mindkét beállítás arra vonatkozik, hogy mennyi ideig futhat egy script maximum. A php-pfm konfigban szereplő érték nem írható felül user oldalról, ami viszont nem mondható ez a php.ini-ben beállított értékről.
ISPconfig konfigurációban a fenti paraméterek nem írhatók be a etcphp-fpm.conf fájlba. (nem fog elindulni a php-fpm)
Ennek az a magyarázata, hogy ezt az értéket pool-onként kell definiálni. Magyarul, a etcphp-fpm.d mappában található fájlokban kellene, hogy megjelenjenek ezek a paraméterek, csakhogy azokat a fájlokat az ISPconfig hozza létre.
A teendő a usrlocalispconfigserverconfphp_fpm_pool.conf.master fájl megszerkesztése vagy átmásolása a conf-custom mappába és az ottani verzió szerkesztése.
Én konkrétan ezt írtam bele:
request_terminate_timeout = 30s
request_slowlog_timeout = 20s
slowlog = /var/log/php-fpm/php-fpm-slow-{fpm_user}.log
Erről jutott eszembe, hogy a fenti problémát állítólag okozhatja a client_max_body_size nginx paraméter túl kicsi értéke is. Ez az érték mondja meg pl. azt is, hogy mekkora fájlt enged feltölteni az nginx.
Ezt szintén csak ilyen cseles úton tudjuk központilag növelni.
A szerkesztendő file a usrlocalispconfigserverconfnginx_vhost.conf.master és valami ilyesmit kell beleírni:
client_max_body_size 100;
Másik lehetőség, hogy a fenti sor bedobható az nginx paraméterek közé az ISPconfig web felületén is, webhelyenként.
A fenti problémára van még egy javasolt alternatív megoldás. E szerint az nxinx konfigurációs fájlba kell beírni ezt:
proxy_read_timeout 120;
A location / { után…
MySql konfiguráció
Az ISPconfig leírás nem szól a MySql szerver beállításairól. Tulajdonképpen alapértelmezetten hagyja azokat. Egy több weboldalt kiszolgáló webszerveren azért érdemes hangolni az adatbázis szerverén szerintem. Nem vagyok egy MySql guru, szóval én is több weboldalról meg a MySql súgójából vadásztam össze, hogy mit érdemes beállítani. Tehát 4 GB rammal ellátott 4 magos szervert feltételezve, én ezeket állítanám be a my.cnf fájlban:
character-set-server = utf8
max_connections=600
skip-external-locking
log-error=/var/log/mysqld/error.log
key_buffer_size = 1024M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 128M
thread_cache_size = 32
query_cache_size= 32M
query_cache_limit=2M
query_cache_type=1
# Try number of CPU’s*2 for thread_concurrency
thread_concurrency = 8
max_allowed_packet = 16M
de nem biztos, hogy igazam van. 🙂 Mondjuk nálam jól működik.
PHPmyadmin configuration storage
Az új verziójú PhpMyadmin program rendelkezik egy configuration storage nevű adatbázissal csakhogy ezt külön kell telepíteni, beállítani. A fent említett leírás erről sem szól A PhpMyadmin e nélkül is remekül működik, de ha be van állítva, akkor még kényelmesebb használni (ráadásul nem írogat hibaüzeneteket sem).
Első lépésben a create_table.sql fájl segítségével el kell készíteni a phmyadmin adatbázist.
Majd létre kell hozni egy pma nevű felhasználó és jogot adni neki az adatbázishoz.
Végül be kell állítani a pma jelszavát a config.inc.php fájlban és kiszedni a kommenteket a configuration storage-ra vonatkozó beállítások elöl.