Squid pretējais starpniekserveris
Vienas lapas paātrināšana
- Instalē 2 mašīnas: localhost ar Apache 2.0, mediawiki un wordpress; localhost1 ar Squid. Abām mašīnām ir savi nosaukumi, otrā mašīnai hosts failā ir arī pirmās mašīnas IP adrese. No trešā datora var atvērt lapu http://localhost/mediawiki/index.php/Main_Page, kā arī http://10.0.10.28/wp/, kas ielasa visu saturu no pirmā servera. Tālāk veicu sekojošas darbības, lai panāktu, ka visi lapas pieprasījumi iet uz otro datoru uz Squid, kurš strādā kā paātrinātājs.
Klienta datora hosts failā ieraksta, ka localhost hostvārdam ir localhost1 datora IP adrese. Tādējādi klients savus pieprasījumus localhost datoram sūtīs uz Squid datora IP adresi:
$ grep ubu /etc/hosts
10.0.10.25 localhostSquid konfigurācijas failā veic sekojošas izmaiņas:
$ diff squid.conf squid.conf.noklus
1,5d0
< visible_hostname none
< acl musu_lapas dst localhost
< http_access allow musu_lapas
< cache_peer 10.0.10.28 parent 80 0 no-query originserver
< http_port 80 accel defaultsite=localhost vhost
927c922
< #http_port 3128
---
> http_port 3128Ar šo pietiek, lai statisko saturu ņemtu no keša, bet dinamisko turpinātu prasīt www serverim katram pieprasījumam. Mediawiki un Wordpress gadījumā tas dod maz, jo to ģenerētajās lapās ir papildus informācija, kas aizliedz tās kešot. Gan tests
ab -c 1 -n 10 http://localhost/mediawiki/index.php/1.lapagan
ab -c 1 -n 10 http://localhost/wp/index.phpuzrāda apmēram 10 lapas/s, un Squid access.log failā redzams iemesls: "TCP_MISS/301".
Toties
ab -c 1 -n 10 http://localhost/wp/readme.htmldod apm. 1200 lapas/s.
Mediawiki gadījumā var prasīt tai, lai nepretojas kešošanai, failā LocalSettings.php pievienojot rindiņu "$wgUseSquid = true;". Tā, iespējams, maina kādus lapas parametrus, ļaujot Squid-am kešot dinamiskās lapas. Bez šīs rindas diemžēl Squid pieprasa serverim katru dinamisko lapu. Šīs darbības rezultātā
ab -c 1 -n 10 http://localhost/mediawiki/index.php/1.lapauzrāda apm. 1200 rezes/s (pēc pirmās iekešošanas), bet /mediawiki/skins/monobook/user.gif - apm. 1500 reizes/s. Tātad dinamiskā lapa atsaucas līdzīgā laikā, kā maza statiska bildīte.
Lai kešotu dinamisko saturu arī Wordpress u.c. kešošanai nekonfigurējamām programmām, veicu sekojošas izmaiņas squid.conf failā (visas izmaiņas):
$ diff squid.conf squid.conf.noklus
1,8d0
< visible_hostname none
< acl musu_lapas dst localhost
< http_access allow musu_lapas
< cache_peer 10.0.10.28 parent 80 0 no-query originserver
< http_port 80 accel defaultsite=localhost vhost
<
< cache_mem 64 MB
< maximum_object_size_in_memory 300 KB
930c922
< #http_port 3128
---
> http_port 3128
2428,2429c2420,2421
< #acl QUERY urlpath_regex cgi-bin \?
< #cache deny QUERY
---
> acl QUERY urlpath_regex cgi-bin \?
> cache deny QUERY
2512c2504
< refresh_pattern . 5 100% 10 override-expire override-lastmod reload-into-ims
ignore-reload ignore-no-cache ignore-private ignore-auth
---
> refresh_pattern . 0 20% 4320Rezultātā
ab -c 1 -n 10 http://localhost/wp/index.phpuzrāda ap 2000 lapas/s, bet
ab -c 1 -n 10 http://localhost/mediawiki/index.php/1.lapaap 1100 lapas/s.
- Tās pirmais parametrs "." attiecina rindu uz visiem pārējiem pieprasījumiem (iepriekš ir divi ftp un gopher protokoliem), otrais parametrs "5" nozīmējot minimālo iekešošanas minūšu skaitu, kuru uzspiedīs visiem objektiem, ceturtais parametrs "10" nosaka maksimālo iekešošanas laiku. Piebildīšu, ka man neradās pārliecība, ka tas laiks ir minūtēs, jo, norādot 1 minūti, man dinamiskās lapas nekešojās. Ar 5 t.s. minūtēm - kešojās. Daudzie papildus parametri dotajā rindā ir papildus norādes apiet dažādus "lai nekešo" paņēmienus.
Svarīgākā rindiņa augšminētajā konfigurācijas failā ir tā, kas sākas ar
refresh_pattern . 5 100% 10
Vairāku lapu paātrināšana
Iepriekšējais risinājums bija viena domēna vārda paātrināšanai. Došu piemēru vairāku serveru vai virtuālo hostu paātrināšanai. Klienta hosts failā pieliku rindiņu linux.edu.lv hostvārdiem, kas norāda uz Squid datoru:
10.0.10.25 linux.edu.lv www.linux.edu.lvViens no ražošanā lietojamiem variantiem būtu apmēram šāds: DNS sistēmā hostējamo domēnu vārdiem piekārtot Squid servera publisko IP adresi; tīmekļa serveriem iedot jebkuru citu IP adresi (kaut vai rezervēto), bet lai tie ir pārliecināti par savas IP atbilstību saviem hostējamiem domēniem, piemēram, ar vietējā hosts faila palīdzību vai, visus vārdus taisot kā CNAME uz servera oriģinālo vārdu; Squid serverī uztaisīt konfigurāciju līdzīgu zemāk dotajai, kas pieprasījumus pēc konkrētiem domēniem pāradresētu dotajiem serveriem un iekešotu rezultātu. Jāpiebilst, ka tīmekļa lietotnēm, kas mēdz atbildēs iekodēt savus IP parametrus, varētu palīdzēt Squid parametrs
"redirect_rewrites_host_header off"(tas vēl jāpārbauda).
Papildināju squid.conf faila sākumu ar papildus acl un cache rindiņām, kas tagad izskatās šādi:
visible_hostname none
acl musu_lapas dst localhost
acl musu_lapas dst linux.edu.lv
http_access allow musu_lapas
cache_peer 10.0.10.28 parent 80 0 no-query originserver name=localhost
cache_peer_domain localhost localhost
cache_peer 195.13.158.141 parent 80 0 no-query originserver name=linuxedulv
cache_peer_domain linuxedulv linux.edu.lv www.linux.edu.lv
http_port 80 accel defaultsite=localhost vhostPēc šīm darbībām kešojas arī http://linux.edu.lv/, un
ab -c 1 -n 100 http://linux.edu.lv/index.phpuzrāda ap 100 lapas/s. Tik maz tādēļ, ka lapas lielums ir ap 70kB.
Saites
- Squid starpniekserveris
- http://www.squid-cache.org/Versions/v2/2.6/cfgman/
- http://wiki.squid-cache.org/SquidFaq/ReverseProxy
- http://wiki.squid-cache.org/ConfigExamples/DynamicContent
Created by Valdis Vītoliņš on 2008-08-09 16:28
Last modified by Valdis Vītoliņš on 2021-05-09 15:57