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
- 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>
|