Note, that this recipe is not updated long time and could be outdated!
Got it.

Squid pretējais starpniekserveris

Squid kā paātrinātājs jeb pretējais starpniekserveris, t.i. pēc URL adreses kešatmiņā glabā dažu tīmekļa serveru lapu saturu.

Vienas lapas paātrināšana

  1. 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.
  2. 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 localhost
  3. Squid 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 3128
  4. Ar š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.lapa

    gan

    ab -c 1 -n 10 http://localhost/wp/index.php

    uzrā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.html

    dod apm. 1200 lapas/s.

  5. 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.lapa

    uzrā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.

  6. 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% 4320

    Rezultātā

    ab -c 1 -n 10 http://localhost/wp/index.php

    uzrāda ap 2000 lapas/s, bet

    ab -c 1 -n 10 http://localhost/mediawiki/index.php/1.lapa

    ap 1100 lapas/s.

  7. Svarīgākā rindiņa augšminētajā konfigurācijas failā ir tā, kas sākas ar

    refresh_pattern . 5 100% 10
    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.

Vairāku lapu paātrināšana

  1. 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.lv
  2. Viens 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).

  3. 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 vhost
  4. Pēc šīm darbībām kešojas arī http://linux.edu.lv/, un

    ab -c 1 -n 100 http://linux.edu.lv/index.php

    uzrāda ap 100 lapas/s. Tik maz tādēļ, ka lapas lielums ir ap 70kB.

Saites

 

Created by Valdis Vītoliņš on 2008-08-09 19:28
Last modified by Valdis Vītoliņš on 2013-09-09 13:49
 
Xwiki Powered
Creative Commons Attribution 3.0 Unported License