Apache 2 Configurație avansată pe sistemele similare Unix

Într-un tutorial anterior, am aruncat o privire la unele dintre cele mai de bază, dar importante, directive de configurare Apache - pentru ce sunt și cum să le editați pentru a se potrivi nevoilor noastre. Pentru un site web de bază (probabil unul cu doar câteva pagini HTML statice), acele simple directive ar putea fi tot ce trebuie să știți. Șansele sunt, totuși, că aveți nevoie de un site mai complex; astăzi vom examina câteva directive avansate și setări de configurare.

Aptitudinea lui Apache este controlată prin setările și directivele aplicate în fișiere de configurare în format simplu, care de obicei se termină cu extensia ".conf".

Cel mai important .conf fișierul este httpd.conf, deși aceasta depinde de instalarea dvs. și de distribuția Linux (de exemplu, ar putea fi numită apache2.conf in schimb). Aceste fișiere de configurare se aplică, în general, serverului în ansamblu, chiar dacă serverul găzduiește mai multe site-uri Web.

Fișierele de configurare per-director se numesc ".htaccess"fișiere în mod implicit și sunt localizate în directorul de documente publice al serverului web, care permite ca anumite directive să fie aplicate anumitor directoare și subdirectoarelor lor, în locul întregului server și a tuturor site-urilor găzduite ale acestuia. numele .htaccess fișier la altceva folosind AccessFileName directivă, care poate fi stabilită httpd.conf:

# # AccessFileName: Numele fișierului de căutat în fiecare director # pentru directive suplimentare de configurare. # AccessFileName .htaccess

Vă rugăm să rețineți că htaccess nu este o prelungire; este numele fișierului. În sistemele de operare asemănătoare UNIX, punctul (.) care precede un nume de fișier înseamnă că fișierul este ascuns.

Având în vedere localizarea lor în sistemul de fișiere, nu toate directivele pot fi aplicate în .htaccess fișiere, deoarece unii ar putea pur și simplu să nu fie valabili. Fiecare linie dintr-un fișier de configurare trebuie să înceapă cu una dintre următoarele:

  • A #, indicând un comentariu
  • o directivă valabilă
  • un spațiu
  • o linie goală

Dacă o linie nu începe cu una dintre opțiunile de mai sus, Apache va emite un mesaj de eroare în loc să pornească serviciul HTTP. Prin urmare, este important să vă asigurați că configurația serverului este validă. Dacă o directivă se extinde pe mai multe linii, închideți fiecare linie cu un slash înapoi (\) înainte de a trece la următoarea directivă.


Menținerea flexibilității

Cel mai important fișier .conf este httpd.conf.

În timp ce efectuați propriile modificări ale fișierelor de configurare implicite, este bine ca acestea să se transforme în fișiere externe (cu nume semnificative, desigur) și să le includeți în fișierul de configurare principal, utilizând include directivă. Dacă separarea setărilor de la setările implicite ale serverului nu este posibilă, cel puțin faceți un obicei să comenteze setările vechi înainte de a introduce altele noi. Acest lucru va face mai ușor să revin la orice versiune de fișier în cazul în care apare necesitatea și vă permite, de asemenea, să faceți upgrade la o versiune mai nouă a httpd.conf fișier cu hassle minim. Tot ce trebuie să faceți este să copiați noua versiune în locul versiunii vechi și să reintroduceți includerea la sfârșitul noului fișier (sau cel puțin să reaplicați modificările vechi după ce ați comentat cele implicite în noul fișier) . De exemplu:

... # Sfârșitul configurației implicite apache #Începerea noii dvs. configurații și setări # Includeți lista de porturi Includeți /etc/apache2/ports.conf # Includeți fragmente generice de instrucțiuni Includeți /etc/apache2/conf.d/ # Includeți configurația modulului: Includeți /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf

După cum puteți vedea din exemplul de mai sus, puteți include un anumit fișier după nume, un director (și toate fișierele și subdirectoarele din acesta) sau mai multe fișiere utilizând metacaractere.


Setari avansate

În tutorialul meu despre Apache, ați învățat câteva directive de bază care controlează comportamentul lui Apache. În acest tutorial, vom examina câteva directive avansate, începând cu .

Directivă

vă permite să specificați setările și directivele care se aplică directoarelor și subdirectoarelor. Aceasta vă oferă posibilitatea de a face tot felul de lucruri, cum ar fi limitarea accesului la anumite directoare și fișiere și activarea sau dezactivarea anumitor opțiuni la anumite directoare, printre altele.

etichetele să ia o cale și să închidă un bloc de opțiuni care să fie aplicate acelui director și subdirectoarele acestuia. Iată un exemplu:

 Opțiuni None AllowOverride Nici o comandă Deny, Allow Deny from all 

Deschiderea tag în acest exemplu specifică o cale de /, ceea ce înseamnă directorul rădăcină și toate subdirectoarele și fișierele acestuia. Setările definite în interiorul etichetele se aplică la / cale (în esență, totul în rădăcină).

Rețineți că htaccess nu este o extensie; este numele fișierului.

Opțiuni directiva declară caracteristicile serverului care sunt valabile pentru directorul specificat. În acest exemplu, opțiunile nu sunt valabile pentru / cale. Dar ați putea specifica orice număr de opțiuni, cum ar fi permiterea de link-uri simbolice, permițând executarea de scripturi CGI, permițând includerea pe partea de server și multe altele.

AllowOverride directiva îi spune serverului setările declarate în cadrul pentru a ignora dacă acestea sunt reinițializate în .htaccess fişier. Când serverul găsește un .htaccess , trebuie să știe care direcții declarate în acel fișier pot suprascrie directivele anterioare de configurare. Dacă AllowOverride este setat sa Nici unul, după cum se arată în exemplul de mai sus, atunci nu sunt suprimate directivele și nici o declarație din nou .htaccess fișierele sunt complet ignorate.

În cazul în care AllowOverride directiva este setată la Toate, atunci orice directivă re-declarată în .htaccess fișierul va înlocui directivele anterioare de configurare. AllowOverride pot lua anumite tipuri de directive care pot fi ignorate în timp ce restul va fi ignorat.

tăgădui și Permite controla accesul la directorul specificat în eticheta de deschidere și sunt prioritizate prin Ordin directivă.

În exemplul de mai sus, Ordine Respingeți, Permiteți înseamnă că toate gazdele de conectare sau adresele IP nu au acces la directorul rădăcină, cu excepția celor declarate ca gazde bune. Ordine Permite, Neagă pe de altă parte ar însemna că tuturor gazdei și IP-urilor li se va permite accesul la directorul rădăcină, cu excepția celor declarate ca fiind rele sau negre.

Negi de la toate setarea declară că accesul trebuie refuzat de la toți gazdele. Deoarece nu este urmat de un whitelist, nici gazde sau IP-uri nu au acces la directorul rădăcină (și așa ar trebui să fie din motive de securitate). Numai pentru scopuri demonstrative, exemplul de mai jos demonstrează modul de a refuza accesul de la toate gazdele, cu excepția www.goodhost1.com și www.goodhost2.com:

 Ordonare Deny, Permiteți Negi de la toate Permite de la www.goodhost1.com www.goodhost2.com 

Rețineți că Ordin directiva definește prioritatea normelor. Deci, mai întâi, refuzăm accesul de la toate gazdele, iar apoi permitem doar accesul la cele două gazde www.goodhost1.com și www.goodhost2.com. Alternativ, puteți specifica cele două gazde pe o linie separată, cum ar fi:

 Ordonare Deny, Permiteți Deny de la toate Permiteți de la www.goodhost1.com Permiteți de la www.goodhost2.com 

Dacă doriți să permiteți accesul la toate subdomeniile gazdei goodhost.com (de exemplu: sub1.goodhost.com, sub2.goodhost.com, și sub3.goodhost.com), puteți specifica un nume de domeniu parțial pentru a acorda accesul în loc să includă toate subdomeniile care vor fi permise. Următorul exemplu vă arată cum:

 Ordonare refuza, permite refuzarea tuturor permisiunilor de la goodhost.com 

În plus, dacă doriți să refuzați accesul tuturor, cu excepția unei anumite adrese IP din rețeaua locală, exemplul următor ilustrează modul în care puteți face acest lucru:

 Ordonare Deny, Permiteți Deny de la toate Permite de la 192.168.2.103 

Dacă doriți să permiteți accesul la toate gazdele, cu excepția câtorva gazde rău, ați putea face acest lucru:

 Comandă Permite, Neagă Permite de la toate Deny de la www.badbot1.com badbot2.com spamhost.com 

Exemplul de mai sus deschide directorul public pentru toți clienții conectați, cu excepția a două roboturi rău și a unui gazdă spam. Rețineți utilizarea fie a întregului nume de domeniu, fie a numelui de domeniu parțial în lista neagră a gazdei.

Similar cu este . Cuprinde un grup de directive care se aplică numai directorului numit și subdirectoarelor sale. În loc să specificați o cale, este nevoie de o expresie regulată ca argument.

Indici și direcții de index

Când vizitați un site web, adesea introduceți doar numele domeniului fără a specifica o pagină (de exemplu: www.example.com spre deosebire de www.example.com/index.html). Motivul este că serverul de obicei vă oferă întotdeauna pagina implicită.

Această funcționalitate este guvernată de DirectoryIndex directiva privind serverul web; acesta îi spune serverului pagina implicită să răspundă dacă nu este specificat niciun fișier în URL.

DirectoryIndex pot avea mai multe valori (adică mai mult de un nume de fișier), astfel încât atunci când serverul întâlnește o solicitare care nu specifică un anumit fișier, serverul va trece prin mai multe valori unul câte unul până când găsește un fișier cu același nume în directorul solicitat.

 IndexIndex index.php index.html 

Dacă un client solicită un director care nu conține niciunul dintre fișierele implicite listate de către DirectoryIndex directive, serverul răspunde cu listarea directorului, o listă a tuturor fișierelor și subdirectoarelor conținute în acel director. Acest lucru ar putea fi un risc de securitate, deoarece fișierele și structura sistemului de fișiere din directorul solicitat sunt expuse. Puteți evita acest comportament prin utilizarea funcției Indici ai opțiunea de a împiedica înregistrarea directoarelor pe DocumentulRădăcină nivel (care este directorul rădăcină al htdocs al serverului sau al fișierelor publice). Dacă doriți să afișați listele de dosare pentru orice subdirector în cadrul DocumentulRădăcină, puteți activa funcția Indici ai pentru acel dosar special. Următoarea listă demonstrează acest lucru:

 Opțiuni -Index   Opțiuni Indexuri 

Exemplul de mai sus dezactivează listele de directoare din folderul principal public HTML (în acest caz / Usr / local / apache2 / htdocs /) și toate subdirectoarele, apoi o repornește doar pentru / Usr / local / apache2 / htdocs / sub-dir1 / subdirector.

Directivă

In timp ce directiva specifică permisiunile sau restricțiile care trebuie aplicate unui anumit director, directiva controlează restricțiile și permisiunile pentru unul sau mai multe fișiere (în numele unui fișier trebuie să fie folosite metacaractere pentru a specifica mai multe fișiere). Aruncați o privire la această listă:

 Ordinul permite, respinge Deny de la toate 

Acest exemplu folosește directivă pentru a preveni .htaccess fișierele de la vizualizate de clienții web. Imaginea de mai jos este o captură de ecran a ceea ce serverul răspunde dacă încercați să îl preluați .htaccess fișier solicitând ceva de genul http://www.example.com/.htaccess.

În mod similar, Directiva limitează domeniul de aplicare al directivelor anexate prin numele fișierului, la fel ca și directiva. Cu toate acestea, acceptă o expresie regulată ca argument.

Directivă

directiva funcționează similar cu cu excepția faptului că este nevoie de o adresă URL ca argument, spre deosebire de o cale către un director fizic local din sistemul de fișiere. Aceasta înseamnă că pot fi utilizate pentru controlul conținutului în afara serverului.

Este foarte recomandat să nu utilizați directivă cu locații locale ale sistemului de fișiere, deoarece multe adrese URL pot fi mapate în același fișier.

Directiva limitează, de asemenea, domeniul de aplicare al directivelor anexate prin adresa URL. La fel ca și celelalte directive "Match", acceptă o expresie regulată ca argument.

și directivă

direcțiile de control care metodele HTTP (de exemplu: OBȚINE, POST, etc) sunt permise. După cum se vede în exemplul de mai jos, Directiva neagă utilizarea POST, A PUNE, și ȘTERGE metode pentru toate cererile clientului, cu excepția celor care provin din 50.57.77.153.

 Ordonare Deny, Permiteți Deny de la toate Permite de la 50.57.77.153 

Directiva oferă funcționalitatea opusă. Acesta controlează în continuare ce metode HTTP sunt permise, dar o face într-o manieră exclusivă. În exemplul de mai jos, respinge accesul la toate solicitările clientului utilizând orice alte metode HTTP decât OBȚINE și POST.

 nega de la toate 

Structura de configurare și prioritatea directivei

Este foarte recomandat să nu utilizați directivă cu locațiile locale ale sistemului de fișiere.

Apache-ul vine de la capacitatea de a extinde capabilitățile serverului de modulele scrise de alți programatori. Ca atare, directivele pot fi setate fie în codul de bază Apache, fie în modulele instalate. Pentru a prioritiza efectul și scopul directivei, Apache împarte structura sa de configurare în trei niveluri:

  • Configurație la nivel de server
  • Instrucțiuni pentru containere
  • Configurarea pe director

Configurația la nivel de server include direcțiile implicite stabilite pentru server ca întreg. Aceste directive pot fi apoi suprascrise de fișierele de configurare per-director (.htaccess fișiere) sau în cadrul directivelor privind recipientele (cum ar fi și Etichete).

Fișierele per-director sunt frecvent localizate în (sau pot fi adăugate la) structura fișierului public director; conținutul cărora este disponibil pentru sub-administratori și dezvoltatori și, prin urmare, care au capacitatea de a-și mizeria configurația serverului prin adăugarea tuturor tipurilor de directive către diferite părți ale serverului. Prin urmare, administratorul de server are capacitatea de a controla care directive se pot aplica în acele fișiere și ce directive pot sau nu pot înlocui configurația implicită a serverului.


Concluzie

Acest articol a fost destinat administratorilor de servere pentru a oferi o referință pentru setările Apache mai avansate și opțiunile de configurare. După cum am aflat, puteți aplica aceste directive fie la nivel de server, fie la nivel de director. În funcție de cum și unde stabiliți aceste directive, serverul dvs. va combina aceste setări într-o configurație finală unificată.

Cod