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.
1 2 3 4 5 |
location / { allow 192.168.1.101/24; allow 127.0.0.1; deny all; } |
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.
1 2 3 4 5 |
server { ... auth_basic "Private Website"; auth_basic_user_file private/htpasswd; } |
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.
1 2 3 4 5 6 7 8 9 |
server { ... auth_basic "Private Website"; auth_basic_user_file private/htpasswd; location /public/ { auth_basic off; } } |
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.
1 2 3 4 5 6 7 8 9 |
location / { satisfy any; allow 192.168.1.22; deny all; auth_basic "Private Website"; auth_basic_user_file private/htpasswd; } |
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.
1 2 3 4 5 6 7 |
http { limit_conn_zone $binary_remote_address zone=addr:10m; location /download/ { limit_conn addr 1; } } |
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.
1 2 3 4 5 6 7 |
http { limit_req_zone $binary_remote_addr zone=limit_search:10m rate=1r/s; location /search/ { limit_req zone=limit_search burst=5; } } |
Limitarea vitezei de download
Pentru a limita viteza de download pe conexiune vom folosi directiva limit_rate.
1 2 3 |
location /download/ { limit_rate 50k; } |
Se poate seta această setare și după ce s-au descărcat o parte din date cu limit_rate_after.
1 2 3 4 |
location /download/ { limit_rate_after 200k; limit_rate 50k; } |
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.
1 2 3 4 |
location /download/ { limit_conn addr 1; limit_rate 50k; } |
1 Response
[…] 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ă […]