Nginx

Allikas: Kuutõrvaja

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

Lingid

http://wiki.codemongers.com/Nginx

http://www.linuxjournal.com/article/10108