Apache httpd mult timp în urmă a câștigat faima ca cel mai popular în lumea web-server. Cu toate acestea, mulți nu sunt chiar conștienți de faptul că el poate face konkruentsiyu nu numai IIS, dar Squid.
Luați în considerare un design tipic pentru o organizație mică: poarta de acces la Internet, care rulează sub Unix sau Microsoft Windows Management, server proxy, server web intranet, server de mail, etc. Se pare că numărul de elemente pot fi oarecum reduse, în conformitate cu regula de aur a inginerului, crescând astfel fiabilitatea sistemului în ansamblu. Astăzi vorbim despre delegarea Apache a principalelor funcții ale unui server proxy cache (de exemplu, Squid) și chiar ceva dincolo de ele. Sistemul de operare de bază va folosi Linux, deși o mare parte din ceea ce este discutat mai jos pot fi aplicate fără pierderi de generalitate și pentru alte platforme.
Sunt de acord, folosesc Apache ca server proxy este un pic în afara cutiei, cu toate acestea, are mai multe avantaje. Este, în primul rând, capacitatea de a comprima în mod dinamic documente trimise clienților, care pot duce la economii majore atunci când sunt utilizate pentru linii închiriate transmisia de date cu MBs de plată traficul de intrare (de exemplu, birourile companiei în două, dar numai un singur server). În plus, se reduce numărul de servicii care rulează pe sistem, ceea ce înseamnă că un potențial atacator ar fi mai puțin de o țintă pentru atacuri, și administrator, la rândul său, site-uri mai mici, care necesită o supraveghere atentă și de sprijin. Cu toate acestea, la fel ca orice altceva în lumea noastră imperfectă, Apache ca un server proxy are unele dezavantaje, cum ar fi: conține experimentale sau scrise de terță parte plug-in-uri (dacă doriți, puteți face fără ele) și se comportă necunoscute atunci când sarcina crește ( pe deplin recunosc că totul va funcționa bine, cu toate acestea, o testare de stres de specialitate nu este efectuat). Care castron va depăși - te decizi. Ghidat de experiența personală, pot recomanda bine utilizarea unui server proxy bazat pe Apache în rețele mici.
Având în tratate cu întrebări teoretice, trece la detaliile tehnice. Pentru a implementa avem nevoie de versiunea Conceput Apache 2.0.53 sau mai mare (versiuni mai vechi au bug-uri în mod_cache, a interfera cu funcționarea normală a documentelor memorate în cache) mod_proxy activat, mod_cache și mod_deflate. Spre deosebire de soluțiile specializate, cum ar fi cele de mai sus-menționat calmar, un server proxy bazat pe Apache este, în esență, o arhitectură modulară, toate funcțiile posibile ale care sunt construite pe principiul că baza totală + furnizori. Vom vedea mai mult de o dată în cursul prezentării. Deci, vom trece la prima fază:
Pornirea Proxy
Pentru Apache ar putea primi și gestiona cererile proxy, trebuie să descărcați modulul mod_proxy, o parte din setul de livrare și bine documentate. În continuare, în acest articol nu vom duplica paginile de manual, oprindu-se doar la momentele banale. mod_proxy, la fel ca cele mai multe dintre celelalte acte enumerate în modulele de articol nu corespund în mod normal, la configurația implicită Apache, astfel încât va trebui să re-compila serverul cu parametrii corespunzători configurați script-ul. sprijin mod_proxy pentru opțiunea responsabilă «--enable-proxy», alți parametri sunt la fel, voi aduce în text între paranteze după numele modulului respectiv.
În conformitate cu formula de mai sus, mod_proxy formează fundația pe care suportul de lucru solicitările proxy ale sistemului. punerea în aplicare a acestora, specifice protocoale diferite, realizate în module separate: mod_proxy_http (enable-proxy-http), mod_proxy_ftp (--enable-proxy-ftp) și mod_proxy_connect (--enable-proxy-Connect). Ultima este necesară pentru a lucra cu cereri HTTP CONNECT, în special, securizat SSL conexiune.
Pentru Apache poate accepta cereri de proxy, trebuie să le permită în mod explicit, folosind directiva „ProxyRequests On“. Cu toate acestea, nu se grăbesc să-l facă, fără a se deranja despre securitatea conexiunilor la rețea! megaocteți Paying descărcat adolescenții întreprinzători cu ProxyHunter'om în mâinile lor - nu distracție cât mai plăcută. Accesul la parametrii de server sunt stabilite în secțiunea
Ordinul neagă, permite în primul rând # interdicție, apoi permiteți
Refuzați de la toate # Interzice toate
Se lasă la 192.168.0.1/24 # Permiteți accesul la rețeaua internă
AuthName "Tresspassers" # «străin în.“
AuthFile / unele / / fișier # numele secret al fișierului care conține detalii de utilizator
Necesită valid de utilizator # Ignora oricine care este listat în / unele / secrete / fișier
După efectuarea modificărilor necesare în httpd.conf, nu uitați să reporniți Apache. Apoi, deschide browser-ul preferat și asigurați-vă că setările de securitate sunt exact așa cum ați intenționat.
cache
cache de date în Apache gestionează modulul mod_cache (--enable-cache). El este cel care decide dacă este persistența locală admisibilă a unui obiect. scris direct date la mass-media „furnizori modulat logodit“, din care suntem interesați în primul rînd este mod_disk_cache (--enable-disc-cache), care pune în aplicare stocarea cache pe hard disk.
Rețineți că, în ambele aceste Apache 2.0 modulul (mod_cache și mod_disk_cache) au statutul de experimentale. Situația promite să schimbe Apache 2.1, care este încă într-o stare de alfa.
Pentru a activa memorarea în cache, utilizați directiva „disc CacheEnable /“, în cazul în care „disc“ - ID-ul modulului furnizor. Amplasarea cache pe disc și volumul dorit (în kilobytes) este definit în conformitate cu Directiva „CacheRoot <имя каталога>„Și« Cachesize
# Chown apache: apache / cale / catre / cache
# Chmod 0700 / cale / catre / cache
Desigur, în cazul în care sistemul Apache este alimentat de un nume de utilizator și alt proprietar de director și de grup ar trebui să fie modificat în consecință.
Pentru a îmbunătăți performanța memoriei cache pe disc are o structură stratificată. Adăpostirea subdirectoare și o lungime maximă a numelui și controlul lor Directiva CacheDirLevels CacheDirLength. În mod implicit, următoarele valori sunt utilizate pentru a le: CacheDirLevels 2, 3 CacheDirLength
Din păcate, Apache 2.0 nu are mijloace standard pentru a gestiona cache-ul de conținut. Nu puteți șterge datele vechi, treptat, sau o fac în plus față de o anumită cotă cache pe disc. Unele dintre aceste probleme rezolvate în Apache 2.1 cu un htcacheclean utilitar special, care șterge cache-ul după cum este necesar. Nu știu, dacă acesta este transferat la ramura 2.0, cu toate acestea, ca un înlocuitor, puteți scrie un script pentru a curăța periodic directorul (și, pentru o bună măsură, reporniți Apache), în mod independent.
În această etapă am finalizat toate lucrările necesare pentru a produce „identic cu arome naturale“ Squid, sau mai degrabă, ca un subset al funcțiilor sale, care este utilizat într-o rețea de birou tipic mic. Acum vom merge un pic mai departe și să realizeze ceva nou - compresie transparentă de pagini web.
După filtrul său de încărcare mod_deflate creează „dezumfle“, care poate fi instalat într-un mod standard, de exemplu, folosind „SetOutputFilter dezumfla“ directivă. Ghid pentru modulul recomandă ai grijă și de compresie a datelor să dezactivați pentru browsere care, în ciuda funcționalitatea declarat (Notă: Trebuie remarcat faptul că clienții cut-off care nu acceptă de compresie a datelor, mod_deflate produce el însuși, fără nici o intervenție administrator) nu poate oferi nivelul adecvat de sprijin (de exemplu, Navigator 4.x poate netscape ocupa în mod corect numai datele comprimate, cum ar fi text / html, și versiunea sa de 4.06-4.08 nu sunt chiar capabile să-l), dar, așa cum se aplică la serverul proxy, care are sens numai în cazul în care astfel de „dinozauri încă mai sunt în uz în organizația dumneavoastră. Printre alte directive, mod_deflate sprijinit, trebuie menționat DeflateCompressionLevel,
stabilirea raportului de compresie a datelor (număr de la 0 la 9). O valoare mai mare de această mărime oferă o dimensiune mai mică a fișierului rezultat, dar crește sarcina pe procesor. Pentru sistemul de mediu este considerat a fi cea mai bună alegere 6. Nu puteți utiliza această directivă, atunci nu va fi o valoare prestabilită, luată în timpul asamblării sistemului de bibliotecă Zlib.
mod_filter
S-ar părea că totul este bine. Apache noastra este acum capabil să se ocupe de cererile de proxy, a le stoca în memoria cache, și chiar înainte de a trimite comprima. Cu toate acestea, după o scurtă - de timp (de obicei, foarte scurt) găsit artefacte ciudate. Arhivele pentru un motiv oarecare sunt ambalate de două ori ceea ce sperie utilizatorii neinstruiți. Și apoi există două străvechi problema românească „Cine este vinovat?“ Și „Ce ar trebui să fac?“
Val / mod_filter.zip. Pentru al instala, dezarhivează fișierul într-un director temporar pe serverul dvs. și să dea comanda: apxs -c -a -i mod_filter.c.
Ideea de bază mod_filter este de a înlocui filtrul convențional așa-numitele „inteligente“ (filtru inteligent). Filtrul „Smart“ - este un construct abstract care cuprinde condițiile de declanșare și un set de așa-numiții furnizori de servicii, care, la rândul lor, sunt filtre convenționale (acel cuvânt din nou!). Pe termen lung, această abordare poate reduce cantitatea de cod duplicat, care apar în aproape fiecare unitate și de a da un răspuns la întrebarea: „Ar trebui să se ocupe de această porțiune de date“ Cu toate acestea, acum suntem interesați într-un aspecte pur practice.
Condiții de ardere filtru „inteligente“ se poate folosi o varietate de informații: antet câmpuri de solicitare directă (req) și răspuns (respectiv), valorile variabilelor Apache interne care sunt instalate folosind mod_setenvif (env), stivuitoare nume (handler), și același tip exact de transmisie date (tip de conținut).
Directiva „FilterDeclare folosit pentru a crea un“ „filtru inteligent <имя фильтра>“. Conectarea furnizorilor individuali de a gestiona directiva „FilterProvider <имя фильтра> <имя провайдера> <условие>“. Aici, numele se referă la numele de filtru „de obicei“ furnizorului, de exemplu, DEFLATE. După configurarea filtrului „inteligent“, ar trebui să-l adăugați la lanțul de echipa“» filterChain. La procesarea link-uri șir de interogare primite secvențial scanate, atâta timp cât filtru este găsit, care declanșează condiție pentru această interogare special, ar fi adevărat. În mod implicit, adăugând un nou „filtru inteligent“ are loc în capătul lanțului, cu toate acestea, acest comportament poate fi suprimată prin utilizarea prefixe speciale în Directiva filterChain. Pentru detalii consultați documentația.
Acum, modul de a rezolva problema devine clar. Trebuie să adăugați „inteligente“ filtru „Compresor“ (desigur, puteți folosi un alt nume), care va prelucra datele cu tipul de „text / *“. De fapt, tipurile MIME din intervalul de comprimate, poate fi mai largă. De exemplu, eu folosesc următoarea structură:
FilterProvider Compresor dezumfla resp = tip de conținut $ text /
FilterProvider Compresor dezumfla resp = tip de conținut $ application / xhtml
FilterProvider Compresor dezumfla resp = tip de conținut $ application / xml
concluzie
Caseta 1. Un apel Configureaza exemplu, oferind suport pentru toate modulele necesare
--activați-proxy --enable-proxy-http --enable-proxy-ftp --enable-proxy-conecta \