Ari Rantala -> Oppaat -> Apache Web-palvelin: muistiinpanot

5 . Proxy-palvelin ja Virtuaalipalvelimet

Proxy- eli välipalvelin

Välipalvelin
  • hakee tietoa esim. työasemien puolesta ja mahdollisesti säilyttää toistuvasti tarvittavia tietoja saannin nopeuttamiseksi
  • esim. voi nopeuttaa hitaiden yhteyksien takana sijaitsevien Web-dokumenttien latautumista (WWW-proxy)
  • voi myös eristää suljetun verkon julkisesta Internetistä toimien näiden välissä
  • voi kieltää tai suodattaa tietyn sisällön välittämisen
  • voi peilata muita WWW-palvelimia tasaten mm. kuormaa.
Syyt käyttöön siis
  • Ulkoisen liikenteen minimointi
  • Tietoturva: Liikenne keskitetysti jonkin kautta
  • Sisällön rajoitus
  • Kuorman tasaus
Apache
  • voi toimia sekä HTTP-, HTTPS että FTP-proxynä
  • tarvitaan tyypillisesti moduulit: proxy proxy_connect proxy_ftp proxy_http ja tietojen välivarastoimista varten moduuleita disk_cache, cache, file_cache, mem_cache,  joko dynaamisesti tai staattisesti ladattuna.
  • SuSEn RPM-paketoitu Apache sisältää em. moduulit (dynaamisina). Ne pitää kuitenkin ottaa ensin käyttöön (enable). Moduulit "odottavat käyttöönottoaan" hakemistossa /usr/lib/apache2-prefork/.
  • Em. moduulien käyttöönotto:
    • Enabloi YaST/Network Services/HTTP Server/Modules/
      - Edit / Toggle Status TAI
    • Kirjoita suoraan tiedostoon /etc/sysconfig/apache2  ao. moduulien nimet muiden moduulien joukkoon:
      APACHE_MODULES="suexec access actions alias auth auth_dbm autoindex cgi dir env expires include log_config mime negotiation setenvif userdir cache disk_cache file_cache mem_cache proxy proxy_connect proxy_ftp proxy_http ssl php4"
    • Uudet moduulit ladataan Apachen uudelleenkäynnistyksen (/etc/init.d/apache2 restart) yhteydessä

Normaali proxy (Forward proxy)

  • Normaali edelleenlähettävä proxy välittää asiakkaiden (esim. sisäverkossa toimivan työaseman selaimen WWW-sivunlatauspyynnön) pyynnöt kohdepalvelimelle ja palautaa kohdepalvelimen vastaukset työasemille sellaisinaan (tai muutettuina).
  • Voidaan käyttää SuSE 9.1:n RPM-paketoitua Apachea
  • Asiakasselaimet TULEE konfiguroida käyttämään ko. proxypalvelinta. Asetuksia tarvitaan siis sekä Apache Web-palvelimessa että sen proxyä käyttävissä selaimissa!

Esimerkki httpd.conf -tiedostosta:

SuSEssa Proxy- ja välimuistiasetukset voi laittaa tiedoston /etc/apache2/default-server.conf loppuun!


<IfModule mod_proxy.c>
ProxyRequests On
#ProxyBlock playboy.com sex porno
#ProxyVia On
#ProxyRemote http://www.esimdomain.invalid/ http://joku.proxy.josssain:8080
#ProxyRemote http://www.yle.fi/ http://jokutoinen.proxy.jossain:8080

<Proxy *>
Order deny,allow
Deny from all
Allow from 226.104. oma.verkko.invalid
</Proxy>

</IfModule>

Proxy-moduuliin liittyviä direktiivejä

  • ProxReguest tulee olla "On"-asennossa
  • Proxy-direktiivin "Allow from" -rivillä luetellaan ne koneet ja verkot, joista proxy-pyynnöt sallitaan
  • ProxyVia "On" lisää Via-headerin HTTP-viestiehin (sekä pyyntöihin että vastauksiin). Näin saadaan informaatiota, mitä kautta dokumentti on kaikkiaan kiertänyt ja voidaan välttää sivupyyntöjen joutumista "looppiin". Rivi "ProxyVia Full" lisää samaan yhteyteen myös Apachen version. Rivi "ProxyVia Block" poistaa HTTP-viesteistä Via-headerit.
  • ProxyBlock-direktiivillä voidaan määritellä ne kohteet, joita proxy EI välitä. Kieltoon voidaan käyttää mitä tahansa URLin osia.
  • ProxyRemote-direktiivillä voidaan proxyyn tuleva pyyntö ohjata edelleen toisen proxyn käsiteltäväksi.

Selaimen asetukset

Oletetaan, että Proxy-palvelin toimii osoitteessa omaproxy.domain.invalid portissa 8080. Tällöin selaimeen tehtävät asetukset ovat:

Mozilla:

Edit/Preferences/Advanced/Proxies /Manual Proxy Configuration/

HTTP Proxy: omaproxy.domain.invalid Port: 8080

Älä käytä proxy-palvelimen nimen edessä "http-etuliitettä".

Opera (fi):

Tiedosto/asetukset/Verkko/Välityspalvelimet
-> Rasti kohtaan HTTP ja kenttiin tarvittavat arvot.

Microsoft Internet Explorer:

- Työkalut/Internet-asetukset/Yhteydet/Lähiverkko
--> Välityspalvelin/Käytä välityspalvelinta ...

Käänteinen proxy (Reverse proxy)

  • Käänteinen (peilaava) proxy näkyy selaimelle, kuten mikä tahansa Web-palvelin
  • Asiakasselaimiin EI TARVITSE tehdä mitään asetuksia.
  • Selain käyttää käänteistä proxyä yksinkertaisesti silloin, kun sivupyyntö kohdistuu siihen.
  • Käänteinen proxy peittää asiakasselaimilta lopullisen kohteen
  • Käänteisellä proxyllä voidaan mm.
    • sallia pääsy osoitteisiin, jotka ovat palomuurin takana
    • välivarastoida hitaan "ison palvelimen" sisältöä
    • tuoda usean pienemmän palvelimen sisältö samaan nimiavaruuteen
  • Voidaan käyttää SuSE 9.1:n RPM-paketoitua Apachea
  • Huom: Käänteisen proxyn kanssa ei tavallisesti käytetä "ProxyRequest On"!
Käänteisen proxyn käyttö tapahtuu yksinkertaisesti seuraavin direktiivein:
ProxyPass /w3c http://www.w3c.org
ProxyPassReverse /w3c http://www.w3c.org
jonka jälkeen selaimeen kirjoitettu osoite www.kaanteinenproxy.invalid:portti/w3c/ palauttaa osoitteesta www.w3c.org tarjotun sisällön.

Varastoiva proxy (cache)

  • SuSEn (9.1) RPM-paketoitu Apache SISÄLTÄÄ välimuistimoduulin (cache), joten sillä voidaan myös varastoida proxyn kautta kierrätettäviä tiedostoja. Monissa Linux-jakeluissa Experimental-tason välimuistimoduuli ei ole mukana·
  • Tavallisesti välimuistimoduulillisen proxyn joutuu kääntämään itse lähdekoodeista. Esimerkissä on käytetty Apachen 2.0.43-versiota, joka löytyy: http://archive.apache.org/dist/httpd/old/httpd-2.0.43.tar.gz
  • Välitettäviä sivuja voidaan varastoida joko levylle (disk) tai keskusmuistiin (mem)

Apachen kääntäminen välimuistimoduulilla

Proxy-moduulit ja välimuistimoduulit käännetään dynaamisiksi moduuleiksi esim. seuraavasti:
# ./configure --prefix=/usr/local/apacheproxy \
--enable-proxy=shared \
--enable-cache=shared \
--enable-disk-cache=shared \
--enable-mem-cache=shared

# make
# make install

Palvelimen /usr/local/apacheproxy/conf/http.conf-tiedostosta tulisi näkyä käännöksen jälkeen dynaamisesti ladattavat moduulit:

LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Levyvälimuistia varten tulee osoittaa hakemisto tarvittavin oikeuksin. Oletetaan, että Web-palvelimen tehollinen käyttäjä on apache (tarkista asia httpd.conf-tiedostosta):

# mkdir -p /var/apache2/proxy
# chown wwwrun.www /var/apache2/proxy
# chmod 700 /var/apache2/proxy
Määrityksiä välimuistia varten
  • ProxyRequests On
    • Proxy päällä
  • CacheRoot /usr/local/apacheproxy/proxy
    • Välimuistin hakemisto, Muista luoda ja antaa tarvittavat oikeudet
  • CacheSize 102400
    • Välimuistin vähimmäiskoko kilotavuina. Määrä voi nousta (paljonkin) suuremmaksi. Tämän rajan ylimenevä osa kuitenkin poistetaan CacheGcInterval:n osoittamin välein
  • CacheGcInterval 4
    • Välimuistissa olevan tavaran määrän tarkastusväli tunteina, ylimääräiset poistetaa
  • CacheMaxExpire 24
    • 24 tuntia tuoreemmat dokumentit tarjotaan suoraan välimuistista tarkastamatta alkuperäiseltä palvelimelta, onko halutussa dokumentissa muutoksia
  • CacheLastModifiedFactor 0.1
    • Lasketaan dokumenteille expire-period eli aika jolloin dokumentin estimoidaan menevän vanhaksi. Esim: Jos dokumenttia on haettaessa muutettu viimeksi 20 tuntia sitten, niin expire-period on 0.1*20= 2 tuntia.
  • CacheDefaultExpire 1
    • Jos dokumenttia alkuperäiseltä palvelimelta haettaessa ei jostakin syystä saatu expire-time-arvoa, niin käytetään tätä ( tunteina )
  • NoCache adomain.com anotherdomain.edu
    • Verkkoalueet, joiden dokumentteja ei tallenneta välivarastoon
  • CacheEnable mem /critical
  • CacheEnable disk /
    • Kaikki juureen kohdistuneet pyynnöt taltioidaan levylle määriteltyyn hakemistoon
    • Kaikki "hakemistoon" critical kohdistuneet pyynnöt taltioidaan keskusmuistiin.
  • CacheDirLevels 6
  • CacheDirLength 3
    • Maksimimäärä (6) hakemistotasoille hakemistossa, johon sisältö välivarastoidaan. Yksittäisen luodun hakemistonimen maksimipituus on 3. CacheDirLevels * CacheDirLenght pitää olla AINA < 20!
  • CacheDisable /joku-hakemisto
    • "Hakemisto", jota ei haluta välivarastoida.
Esimerkki:

CacheRoot "/www/apache4/proxy"
CacheSize 10000
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
CacheEnable disk /
CacheDirLevels 6
CacheDirLength 3

Lähteitä

Virtuaalipalvelimet (Virtual Host)

Apache Web-palvelin voi palvella useaa eri nimeä ja/tai eri ip-osoitetta. Virtuaalipalvelimia voidaan rakentaa kahdella tapaa:

  • IP-pohjainen virtuaalipalvelin
  • Nimipohjainen virtuaalipalvelin

IP-pohjaiset virtuaaalipalvelimet

  • Palvelimella usea IP-osoite. Tämä voidaan rakentaa:
    • Usealla verkkoliitännällä
    • Käyttämällä samassa verkkoliitännässä (esim. verkkokortti) useaa IP-osoitetta (IP-aliasing, ifgonfig). Linuxissa tälläinen tuki täytyy kääntää kerneliin.
  • Tälläista palvelinta voidaan ajaa joko yhdellä tai useammalla httpd-palvelinprosessilla (isäprosessi). Listen-direktiivillä määrätään, mitä IP-osoitetta/porttia kukin demoni kuuntelee/palvelee. Useaa palvelinprosessia perustellaan esim. sillä, että tietoturvasyistä organisaatio1 ei halua käyttää samaa httpd:tä organisaatio2:sen kanssa. Yhtä httpd:tä perustellaan tehokkuusargumentein.

Esimerkki:

Palvelimella on kaksi IP-osoitetta (111.22.33.44 and 111.22.33.55) nimineen   www.firma.fi   ja
www.tytarfirma.fi . Nimi www.tytarfirma.fi on alias (CNAME) nimelle www.firma.fi  ja se esittää "pääpalvelinta"

...
Port 80
DocumentRoot /www/firma
ServerName www.firma.fi

<VirtualHost 111.22.33.55>
DocumentRoot /www/tytarfirma
ServerName www.tytarfirma.fi
...
</VirtualHost>

www.tytarfirma.fi löydetään vain osoitteella 111.22.33.55, kun taas www.firma.fi löydetään vain osoitteella 111.22.33.44 ( "pääpalvelin" )

  • Esimerkki 2

    Toinen IP-numero valjastetaan Proxy-palvelimen käyttöön:
...
Port 80
Listen 111.22.33.44:80
Listen 111.22.33.55:8080
ServerName www.firma.fi

<VirtualHost 111.22.33.44:80>
DocumentRoot /www/firma
ServerName www.firma.fi
...
</VirtualHost>

<VirtualHost 111.22.33.55:8080>
ServerName www-cache.firma.fi
...
<Directory proxy:>
order deny,allow
deny from all
allow from 111.22.33
</Directory>
</VirtualHost>

Nimipohjaiset virtuaaalipalvelimet

  • Palvelimella vain yksi IP-osoite, mutta monta alias-nimeä (CNAME)
  • Vähemmän konfiguroitavaa, mahdollistaa lähes rajattoman määrän virtuaalipalvelimia...
  • Virtuaalipalvelin valikoituu selaimen lähettämän Host-otsakkeen perusteella. Kaikki selaimet lukuunotamatta oikein vanhoja selaimia lähettävät tämän Host-otsakkeen.

Esimerkki

Palvelimella on kolme nimeä eli kaksi aliasta (CNAME)

...
Port 80
ServerName www.palvelin.fi
...

# Firma1 Oy, A Consulting Oy
<VirtualHost www.firma1.fi>
ServerName www.firma1.fi
ServerAdmin webmaster@firma1.fi
DocumentRoot /home/firma1/public_html
ErrorLog /var/log/httpd/www.firma1.fi/error_log
TransferLog /var/log/httpd/www.firma1.fi/access_log
</VirtualHost>

# Firma2 Oy, B Consulting Oy
<VirtualHost www.firma2.fi>
ServerName www.firma2.fi
ServerAdmin webmaster@firma2.fi
DocumentRoot /home/firma2/public_html
ErrorLog /var/log/httpd/www.firma2.fi/error_log
TransferLog /var/log/httpd/www.firma2.fi/access_log
</VirtualHost>

SuExec ja virtuaalihostit

Jos Suexec on käytössä (ks. ao. luku), niin voi SuExecin DocumentRoottia voi käyttää vain Virtuaalihostin kanssa, jossa User ja Groupmääritelty samaksi, kuin suexecdocrootista ajettavat skriptit. Esim. jotain:

...
Listen 8081
<VirtualHost 195.xxx.xxx.xxx:8081>
DocumentRoot /www/apache3/htdocs/su
#ServerName www.palvelin.fi
User ara
Group ara
ErrorLog logs/8081error_log
TransferLog logs/8081access_log
</VirtualHost>