Restricționarea accesului la resursele HTTP în Nginx

În acest articol vă voi arăta câteva metode prin care puteți restricționa accesul la website sau la anumite părți ale acestuia pe un server Nginx.

Restricționarea accesului în Nginx

Accesul poate fi permis sau refuzat pe baza IP-ului (fix sau interval) sau autentificare HTTP.

Pentru a folosi autentificarea HTTP vom folosi directiva auth_basic. Pentru a avea acces la website utilizatorii vor trebui să introducă un username și o parolă validă. Username-ul și parola vor trebui adăugate în fișierul care va fi specificat la directiva auth_basic_user_file.

De asemenea, se poate permite accesul la o parte din website chiar dacă am setat că e nevoie de autentificare pe tot site-ul. Pentru a dezactiva autentificarea la o parte din website vom folosit directiva auth_basic cu valoare off. Aceasta va rescrie setarea adăugată în blocul părinte.

Putem combina aceste două restricții (IP și autentificare) și putem da acces unor utilizatori fără să fie nevoie de autentificare. Pentru a putea face asta trebuie să setăm directiva satisfy la any. În mod implicit această directivă e setată la all, unde e nevoie ca toate restricțiile să fie satisfăcute.

Limitarea accesului

Se pot limita următoarele:

  • Numărul de conexiuni,
  • Numărul de cereri care sunt permise pe o anumită perioadă,
  • Viteza de descărcare.

Important de menționat este că în aceste exemple limitările se fac pe adrese IP!

Limitarea numărului de conexiuni

Pentru limitarea numărului de conexiuni va fi nevoie să setăm două directive. Prima directivă e limit_conn_zone unde definim cheia și setăm parametri pentru zona de memorie partajată. Primul parametru din această directivă va fi cheia, iar cel de-al doilea va specifica numele zonei și mărimea acesteea.
A doua directivă, limit_conn, va fi folosită pentru a aplica acestă limitare pe resursa pe care avem novoie. Primul parametru va fi numele zonei definit cu limit_conn_zone, iar al doilea va fi numărul de conexiuni permise pe cheie.

Limitarea numărului de cereri care sunt permise pe o anumită perioadă

Principiu de setare a acestei limitări e același ca și la numărul de conexiuni. Întâi specificăm zona și apoi limităm resursa de care avem nevoie.

Directiva folosită este limit_req_zone la care setăm cheia ca prim parametru, zona ca și al doilea parametru ( unde specificăm numele zonei si dimensiunea ) și ca al treilea parametru setăm limitarea ca și cereri pe secundă ( r/s ) sau pe minut ( r/m ).
După ce specificăm zona, folosim limit_req pentru a limita resursa. Nginx nu va procesa mai multe cereri decât cele specificate. Dacă cererile depășesc limitarea acestea sunt adăugate într-o listă și procesarea lor va fi întârziată. Putem specifica numărul de cereri din lista de așteptare folosind parametrul burst. Cererile care depășesc numărul specificat la parametrul burst vor fi returnate cu cu eroarea 503.

Limitarea vitezei de download

Pentru a limita viteza de download pe conexiune vom folosi directiva limit_rate.

Se poate seta această setare și după ce s-au descărcat o parte din date cu limit_rate_after.

Dacă se dorește și limitarea numărului de descărcări pe care un utilizator le poate face simultan trebuie să specificăm și limitarea numărului de conexiuni.

 

You may also like...

1 Response

  1. June 8, 2016

    […] site-ul Magento este instalat pe un server Nginx vă recomand să citiți acest articol pentru a înțelege cum se poate face această […]

Leave a Reply

Your email address will not be published. Required fields are marked *