nginx Engine X, toiseksi yleisin (apachen jälkeen) www-palvelin Linux-ympäristössä, yleistyy nopeasti Ei yhtä full-featured kuin apache, mutta monissa tilanteissa kevyempi (etenkin muistin tarve pienempi, joskus vertailukelpoinen jopa lighttpd:n kanssa) Yleinen (tehokas) edustapalvelimena (proxy) Ubuntussa tai Debianissa asennus onnistuu tavanomaiseen tapaan (apt-get install nginx), mutta valmiiksi paketoitu versio on usein vanha. Jos halutaan uudempi tehdään ensin sudo add-apt-repository ppa:nginx/stable Jos add-apt-repository -komentoa ei löydy: apt-get install software-properties-common Repositorymääritys menee hakemistoon /etc/apt/sources.list.d Jos jo asennettu vanhempi versio, voidaan päivittää tekemällä (edellisen jälkeen) apt-get update; apt-get upgrade nginx # tai apt-get dist-upgrade, päivittää kaiken muunkin
nginx konfiguraatiotiedostot Konfiguraatiohakemisto /etc/nginx Pääkonfiguraatiotiedosto /etc/nginx/nginx.conf Lisäkonfiguraatiotiedostoja /etc/nginx/conf.d/*.conf (automaattisia) ja /etc/nginx/snippets/*.conf (otettava käyttöön erikseen) Omia konfiguraatiotiedostoja voi sisällyttää muualtakin include-direktiivillä Määritellyt virtuaalihostit (www-) hakemistossa /etc/nginx/sites-available, käytössä olevat /etc/nginx/sites-enabled (linkkejä edelliseen) Oletus /etc/nginx/sites-available/default, sijainti: grep root /etc/nginx/sites-available/default /var/www/html, /usr/share/nginx/html tms grep index /etc/nginx/sites-available/default Jos useita vaihtoehtoja, ensimmäistä löytynyttä käytetään Yleensä ainakin index.html toimii Jos default-konfiguraatiota ei käytetä: rm /etc/nginx/sites-enabled/default
nginx: virtual host, esimerkki cat >/etc/nginx/sites-available/tt2.student.it.jyu.fi<<\eof server { listen 80; # Ipv4; voisi olla myös esim. 8080 tai 443 (https) listen [::]:80; # IPv6 server_name tt2.student.it.jyu.fi; root /var/www/tt2.student.it.jyu.fi/html; index index.html; location / { try_files $uri $uri/ =404; EOF ln -s../sites-available/tt2.student.it.jyu.fi /etc/nginx/sites-enabled mkdir -p /var/www/tt2.student.it.jyu.fi/html nano /var/www/tt2.student.it.jyu.fi/html/index.html # jotain sopivaa service nginx reload tail /var/log/nginx/error.log # jos ei toimi...
nginx konfiguraatiodirektiivit Nginx'in konfiguraatiotiedostossa olevat määritykset (direktiivit) voivat olla globaaleja tai jossain aaltosuluilla { rajatussa kontekstissa: http{ server{ location{ events{ Direktiivien loppuun tulee yleensä puolipiste (ei :n jälkeen) Yleisiä globaaleja asetuksia: user (käyttäjätunnus jolla nginx pyörii), worker_processes (montako palvelinprosessia käynnistetään), pid (minne nginx-pääprosessin PID talletetaan); näitä ei yleensä tarvitse muuttaa Konfiguraatiotiedostoon voi lukea muita include-direktiivillä, jokerit toimivat Kaikki http(s)-palvelimiin liittyvät direktiivit (erityisesti myös server{) ovat http{:n sisällä; kaikki.../sites-enabled/... tiedostot tulevat automaattisesti sen sisään (toteutettu include-direktiivillä html{:n sisällä) Virtual host -määritykset tehdään server{ -direktiivillä, niiden sisällön ohjaukset sen sisällä location{'illa events{ ohjaa yhteyksien muodostumista (esim. worker_connections: kuinka monta yhtaikaista yhteyttä per palvelinprosessi sallitaan)
nginx: server{ listen [osoite][:portti] [optiot]; jos :portti puuttuu, oletetaan 80 jos osoite puuttuu, oletus = * = kaikki IPv4-osoitteet [::] = kaikki IPv6 -osoitteet tai myös IPv4 optiolla ipv6only=off server_name nimi [nimi...]; nimi tai nimet joihin vastataan; ensimmäinen ensisijainen jokerit ja regexp'it sallittuja: *.example.com ~^www\..*\.example\.net root polku; sisällön juurihakemisto, johon suhteessa URL-polut tulkitaan index file [file...]; tiedostonimi jota käytetään URLin viitatessa hakemistoon jos useita, käytetään ensimmäistä joka löytyy error_log file stderr syslog:server=... minne virheilmoitukset kirjoitetaan (paljon optioita) location...
nginx: location{ location [= ~ ~* ^~] URI {... location @nimi {... URIsta riippuvia asetuksia (server{in sisällä); voi olla useita sisäkkäin URI voi olla polun alku (esim. /); jos edessä ^~, ohittaa regexpit käsitellään pituusjärjestyksessä, pisin voittaa =koko polku ( = /kala/hauki.html ) voittaa kaikki muut; voi olla esim. yhtaikaa sekä / että = / ~regexp ( ~ \.php$ ), ~* case-insensitive regexp'it voittavat polunalkumääritykset ilman ^~ -prefiksiä regexp'it tulkitaan järjestyksessä, ensimmäinen voittaa @nimi määrittää nimetyn sijainnin käytettäväksi uudelleenohjausviittauksissa location{in sisällä voi olla mm. root, index, error_log, proxy_pass...
nginx: try_files try_files file... URI; Vaihtoehtoja miten tiedosto tulkitaan, ensimmäinen löytynyt voittaa $uri on alkuperäinen polku sellaisenaan =code palauttaa virhekoodin Esim. location / { try_files /huoltokatko.html $uri $uri/ $uri/index.html $uri.html =404; location /pictures/ { try_files $uri /pictures/oletus.jpg; location / { try_files $uri @varakone; location @varakone { proxy_pass http://192.168.6.7:8080;
nginx: php sudo apt-get install php5-common php5-cli php5-fpm Haluttuun konfiguraatiotiedostoon: location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; try_files $fastcgi_script_name =404; set $path_info $fastcgi_path_info; fastcgi_param PATH_INFO $path_info; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; sudo service nginx restart
nginx: rewrite rewrite regexp korvaus [lippu] Muuntaa URIn toiseksi regexp-säännöllä Jos useita, suoritetaan järjestyksessä Liput: break: lopeta rewrite-sääntöjen suoritus tähän last: lopeta tähän ja ala käsitellä muutettua URIa alusta voi johtaa silmukkaan... redirect: palauta temporary redirect -koodi permanent: palauta permanent redirect -koodi Esim. location /download/ { rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break; return 403;
nginx: proxy_pass proxy_pass URL; Ohjaa (yleensä location{in määräämän) URLin toiseen Esim. location / { proxy_pass http://192.168.122.4:8080/; location /images/ { proxy_pass http://192.168.122.5/pics/; Yhdistettävissä esim. rewrite-direktiivin kanssa: location /user/ { rewrite /user/([^/]+) /users?name=$1 break; proxy_pass http://192.168.7.8/;
nginx: reverse proxy Esimerkki: halutaan erottaa virtual hosteja sisäisesti eri virtuaalikoneisiin. Ohjataan kaikki ulkoa tulevat pyynnöt edustapalvelimena toimivalle nginx'ille, jossa on kullekin virtual hostille tämäntapainen määritys: server { listen :80; server_name: 1.example.org; location / { proxy_pass http://kone1:8080/; Virtual hosteja voidaan jakaa virtuaalikoneisiin kuten halutaan, jossain voi pyöriä nginx, jossain apache, jossain lighttpd... jopa useita samassa koneessa eri porteissa, edustakoneen huolehtiessa ohjauksesta oikeaan paikkaan
vmbuilder Vaihtoehtoinen tapa asentaa virtuaalikoneita (Ubuntu/Debian-spesifi): sudo vmbuilder kvm ubuntu --dest $HOME/kone4 --suite trusty --arch i386 --libvirt qemu:///system --mem 256 --rootsize 2000 --cpus 1 --ip 192.168.1.50 --mask 255.255.255.0 --gw 192.168.1.1 - dns 192.168.1.2 --hostname kone4 --domain student.it.jyu.fi --bridge br0 --user tunnus0 --pass= tilapainen --addpkg linux-image-generic --addpkg ssh --addpkg acpid --ssh-key.ssh/id_rsa.pub --proxy http://192.168.1.20:3142 --dest hakemisto, jonka alle kone asennetaan (ei saa olla ennestään olemassa) --addpkg linux-image-generic on tarpeen vain joissakin Ubuntun versioissa olevan bugin takia, muut --addpkg't vapaavalintaisia optioita enemmänkin... Ei-interaktiivinen, kaikki tarvittavat tiedot annetaan komentorivillä Edellyttää root-oikeuksia alustakoneessa Ei (toistaiseksi) tue LVM:ää suoraan (helppo lisätä jättämällä / LVM:n ulkopuolelle)
umask Shellin (bash) sisäinen komento: asettaa oletusarvon luotavien tiedostojen oikeuksille Vanha syntaksi oktaalinen bittimaski poistettaville oikeuksille, esim. umask 022 # ryhmältä ja maailmalta w-oikeus pois umask 067 # ryhmältä rw pois, maailmalta kaikki pois Uusi syntaksi sallitut oikeudet kuten chmod'issa, esim. ylläolevat toisin: umask u=rwx,g=rx,o=rx umask u=rwx,g=x,o= Ilman argumentteja tulostaa voimassaolevan asetuksen, oletuksena oktaalimuodossa, optiolla -S symbolisena
Recovery: LVM / broken Jos recovery boot onnistuu: Ensin fsck, joko suoraan valikosta tai root-shellistä root shellissä: Mountataan / read-write, muuten sitä ei voi muokata: mount -o remount, rw / Mountataan /usr ja ehkä /var, muuten työkaluja on vähän: mount /usr; mount /var Jos mount /usr ei onnistu, esim. /etc/fstab on rikki: Yritetään mountata käsin, esim. mount /dev/kone/usr /usr Korjataan mitä voidaan ilman /usr:ää; jos nano/vi eivät toimi, sed usein toimii Jos jokin levyosio on täynnä: Yritetään tyhjentää, recover- boot -valikosta tai käsin Jos VG:ssä tilaa, suurennetaan LV:tä: lvextend... Huom. optio -r ei tässä yleensä toimi vaan pitää tehdä erikseen resize2fs tai xfs_growfs tms
Recovery: LVM / broken 2 Tilanne: kone1 LVM root (/) niin rikki, ettei Recovery Boot onnistu. Liitetään levy toiseen virtuaalikoneeseen kone2 ja korjataan siellä. Alustakoneessa: virsh destroy kone1 virsh attach-disk kone2 $HOME/kone1.img vdb # --persistent ei tarpeen Kone2:ssa sudo apt-get install lvm2 # ellei kone2:ssa LVM:ää ennestään sudo vgscan ls /dev/mapper # näkyykö kone1-root jne? sudo vgchange -a y kone1 # jos kone1- ei näkynyt yllä sudo mkdir /mnt/root sudo mount /dev/kone1/root /mnt/root sudo nano /mnt/root/etc/fstab # tms, korjataan mitä onkin rikki sudo umount /mnt/root sudo vgchange -a n kone1 ls /dev/mapper # kone1... ei pitäisi enää näkyä Alustakoneessa: virsh detach-disk kone2 vdb virsh start kone1