Nginx
nginx ( engine-x )
..on veebiserver, umbes nagu seda on lighttpd/chereokee, ehk’s optimeeritud kiirusele. Kasutada on teda mugav kas siis front-end proxy’na või load-balancerina.
Kuna talle mod_php / mod_python jne.. asju ei ole, siis alternatiivina saab enamus rakenduste puhul edukalt kasutada FastCGI’d. Tavalisi CGI rakendusi saab kasutada läbi mõne wrapperi.
Probleem
Esmalt hakkas Apache näljaselt ram’i sööma, mida mul oli vaja aga perl’le jagada ( teadagi on tal veel suurem isu.. ) ..seega oli vaja mingit alternatiivset lahendust mis vahendaks http päringuid minu koodile ilma nõnda suurt maksu nõudmata.
Lahendus
rate.ee connection status tundus ilusaid numbreid näitavat, seega otsutasin ka omal nahal nginx’i järgi proovida.
Kahju, et ma venekeelt ei oska, kuid jumal tänatud, et keegi on vähemalt osa sellest dokumentatsioonist ära tõlkinud. Samuti oli abiks google translator, mis seda puzzlet aitas kokku panna. Tagantjärgi oli kõik muidugi äärmiselt lihtne ja loogiline, ehk’s nii nagu peab olema ja hea on. See selleks..
Pärast seda kui olin oma perli koodi ( catalysti baasil ) fastcgi abil ühele ilusale pordile bindinud oli vaja nginxl’le selgeks teha, kuidas siis sellega ühendust saada.
Install
nginx tarkvara saab paigaldada hästivarustatud operatsioonisüsteemide paketihaldussüsteemi kasutades
Tänud siinkohal FreeBSD portmaintainerile, /usr/ports/www/nginx on täitsa olemas ning buildib nii nagu vaja. Seega pärast make install clean’i seal kataloogi all on aeg edasi liikuda /usr/local/etc/nginx alla kus siis confimisega pihta hakata saab.
Conf
..long story short..
nginx.conf:
user www; worker_processes 3; error_log /var/log/nginx-error.log; pid /var/run/nginx.pid; events { use kqueue; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; tcp_nopush on; tcp_nodelay on; server_names_hash_bucket_size 128; include vhost/*; }
Mis siin’s olulist kirjas on? Kõigepealt see tähtis, et kui midagi ei tööta, siis silma peal hoida tail -f /var/log/nginx-error.log käsul. server_names_hash_bucket_size sai suuremaks pandud sellepärast, et vhoste oli lõpuks rohkem kui üks ( hakkas meeldima ).
Kuna selle configa veel midagi huvitavat teha ei saa, siis näitan ka seda vhosti confi
vhost/dev.kast.ee: upstream devkast_backend { server 127.0.0.1:4242; server unix:/tmp/devkast_sock; } server { listen 42; server_name dev.kast.ee; access_log /var/log/www/dev.kast.ee-access.log; location /static { alias /home/sod/proj/root/static; } location / { fastcgi_pass devkast_backend; include fastcgi_params; } }
upstream {} blokk on load-balancingu jaoks, siin näites on küll mõlemad serverid localhostis kuid reaalselt see nii olema ei pea.
Järgmine on siis server {} blokk, siin asuvad kõik need olulised asjad.
- listen 42 – bindib serveri pordile :42
- server_name dev.kast.ee; – sama mis apache ServerName või ServerAlias .. siia võib ritta panna kõik nimed mis sobivad, ala server_name dev.kast.ee minu.kast.ee sinu.kast.ee jne.ee ..
- access_log /var/log/www/dev.kast.ee-access.log; – access logi siis läheb /var/log/www/ alla..
- location /static {} blokk – kõik staatilised failid võib ju otse kätte anda, ei pea sellejaoks upstream servereid tülitama.
- location / {} blokk – siia saabuvad kõik päringud mis ei alga dev.kast.ee/static ‘ga..
- fastcgi_pass devkast_backend; – saadab FastCGI protokolli kasutades päringu edasi serveritele mis nimetatud upstream {} bloki sees asuvad.
- include fastcgi_params; – /usr/local/etc/nginx/fastcgi_params file’i sisu.. ( kuna mul on patchitud Catalyst::Engine::FastCGI moodul siis pole mul vaja SCRIPTNAME ja PATH_INFO sisu vaja vahetada.. muidu vaheta need omavahel välja. )
Enamustele ehk aga pakub hoopis huvi kuidas küll PHP’d sellega siduda, jällegi.. läbi fastcgi.
vhost/php.kast.ee: server { listen 42; server_name php.kast.ee; root /home/sod/php-proj/; access_log /var/log/www/php.kast.ee-access.log; location / { index index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:6969; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /home/sod/php-proj/$fastcgi_script_name; } }
Enamus sellest siin peaks tuttav olema.. aga kuidas siis nüüd php sinna 127.0.0.1:6969 otsa bindida?
lighttpd’ga on kaasas selline hea asi nagu spawn-fcgi programm.. pane see peale ( näiteks cd /usr/ports/www/lighttpd && make && cp work/lighttpd-*/src/spawn-fcgi /usr/local/bin/spawn-fcgi ) ning buildi endale CGI toega php ( buildides oleks hea mõte kõik need fastcgi optionid ka peale keerata.. ).
Seejärel topi see spawn-fcgi abiga tollele pordile kuulama, ala
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 6969 -f /usr/local/bin/php-cgi