ადრე, ჩვენს NGINX ტრაფიკის მართვისა და უსაფრთხოების კონტროლის სერიებში, ჩვენ განვიხილეთ, თუ როგორ შეზღუდეთ კავშირების რაოდენობა ერთი და იგივე კლიენტს შეუძლია თქვენს ვებ-რესურსებში, კლიენტის იდენტიფიკაციის პარამეტრების გამოყენებით, როგორიცაა IP მისამართი. ჩვენ ასევე განვიხილეთ როგორ შეზღუდეთ მოთხოვნების სიჩქარე (შეზღუდეთ კურსი, რომლითაც კლიენტს შეუძლია მოთხოვნის გაკეთება) თქვენი ვებ რესურსებისთვის.
იმის უზრუნველსაყოფად, რომ თქვენი აპლიკაციის გამოყენების გამტარუნარიანობა არ დაიხარჯოს ერთი კლიენტის მიერ, თქვენ უნდა აკონტროლოთ ატვირთვის და ჩამოტვირთვის სიჩქარე თითოეულ კლიენტზე. ეს არის საერთო NGINX უსაფრთხოების კონტროლის წინააღმდეგ DoS (მომსახურების უარყოფა) თავდასხმები მავნე მომხმარებლებისგან, რომლებიც უბრალოდ ცდილობენ ბოროტად გამოიყენონ საიტის მუშაობა.
სერიის ამ მესამე ნაწილში ჩვენ აგიხსნით, თუ როგორ უნდა შეზღუდოთ ქსელის გამტარუნარიანობა NGINX ვებ სერვერი.
გამტარუნარიანობის შესაზღუდად NGINX, გამოიყენეთ ლიმიტის_განაკვეთი დირექტივა, რომელიც ზღუდავს კლიენტზე პასუხის გადაცემის სიჩქარეს. იგი მოქმედებს ში
HTTP, სერვერი, მდებარეობა, და თუ განცხადება ფარგლებში ა მდებარეობა ბლოკი, და ის განსაზღვრავს სიჩქარის ლიმიტს მოცემული კონტექსტისთვის ბიტებში წამში ნაგულისხმევად. თქვენ ასევე შეგიძლიათ გამოიყენოთ მ მეგაბაიტისთვის ან გ გიგაბაიტისთვის.ლიმიტის_განაკვეთი 20k;
კიდევ ერთი დაკავშირებული დირექტივა არის ლიმიტის_შეფასების შემდეგ, რომელიც აკონკრეტებს, რომ კავშირი არ უნდა იყოს შეზღუდული სიჩქარით მანამ, სანამ არ მოხდება მითითებული რაოდენობის მონაცემების გადაცემა. ეს დირექტივა შეიძლება დაყენდეს HTTP-ში, სერვერზე, მდებარეობაში და „თუ განცხადება მდებარეობის ბლოკში“.
ლიმიტი_განზომილება 500 ათასის შემდეგ;
აქ არის კონფიგურაციის მაგალითი, რომ შეზღუდოს კლიენტს შინაარსის ჩამოტვირთვა ერთი კავშირის საშუალებით მაქსიმალური სიჩქარით 20 კილობაიტი წამში.
upstream api_service { სერვერი 10.1.1.10:9051; სერვერი 10.1.1.77:9052; } სერვერი { მოსმენა 80; server_name testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; მდებარეობა / { try_files $uri $uri/ /index.html =404 =403 =500; } მდებარეობა /api { proxy_pass http://api_service; proxy_set_header X-Real-IP $remote_addr; proxy_set_header ჰოსტი $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; პროქსი_http_ვერსია 1.1; proxy_set_header განახლება $http_upgrade; proxy_set_header კავშირი "განახლება"; } მდებარეობა /დოკუმენტები { ლიმიტის_განაკვეთი 20k; ლიმიტი_განზომილება 500 ათასის შემდეგ; } }
მას შემდეგ რაც დაამატებთ ზემოთ ახსნილ საჭირო პარამეტრებს, შეინახეთ ცვლილებები და დახურეთ ფაილი. ამის შემდეგ შეამოწმეთ თუ NGINX კონფიგურაციის სინტაქსი სწორია, მაგალითად:
$ sudo nginx -t.
თუ ყველაფერი წესრიგშია, გადატვირთეთ NGINX სერვისი უახლესი ცვლილებების განსახორციელებლად:
$ sudo systemctl გადატვირთეთ nginx.
ზემოაღნიშნული კონფიგურაციით, კლიენტს შეუძლია გახსნას რამდენიმე კავშირი გამტარუნარიანობის გაზრდის მიზნით. ამიტომ, დამატებით, თქვენ ასევე შეგიძლიათ შეზღუდოთ კავშირები თითო კლიენტზე ისეთი პარამეტრის გამოყენებით, როგორიცაა IP მისამართი, როგორც ადრე ვნახეთ.
მაგალითად, შეგიძლიათ შეზღუდოთ ერთი კავშირი IP მისამართზე.
upstream api_service { სერვერი 127.0.0.1:9051; სერვერი 10.1.1.77:9052; } limit_conn_zone $binary_remote_addr zone=limitconnbyaddr: 20მ; limit_conn_status 429; სერვერი { მოსმენა 80; server_name testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; მდებარეობა / { try_files $uri $uri/ /index.html =404 =403 =500; } მდებარეობა /api { limit_conn limitconnbyaddr 5; proxy_pass http://api_service; proxy_set_header X-Real-IP $remote_addr; proxy_set_header ჰოსტი $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; პროქსი_http_ვერსია 1.1; proxy_set_header განახლება $http_upgrade; proxy_set_header კავშირი "განახლება"; } მდებარეობა /დოკუმენტები { ლიმიტი_განაკვეთი 50k; ლიმიტი_განზომილება 500 ათასის შემდეგ; limit_conn limitconnbyaddr 1; } }
როგორც პარამეტრის მნიშვნელობა ლიმიტის_განაკვეთი დირექტივაში, შეგიძლიათ მიუთითოთ ცვლადები გამტარუნარიანობის დინამიურად შეზღუდვისთვის. ის განსაკუთრებით სასარგებლოა იმ სიტუაციებში, როდესაც განაკვეთი შეზღუდული უნდა იყოს გარკვეული მდგომარეობიდან გამომდინარე.
ამ მაგალითში ჩვენ ვიყენებთ რუკის ბლოკს. ეს საშუალებას გაძლევთ შექმნათ ახალი ცვლადი, რომლის მნიშვნელობა დამოკიდებულია ერთი ან რამდენიმე ორიგინალური ცვლადის მნიშვნელობებზე ($ ნელი და $limit_rate) მითითებულია პირველ პარამეტრში.
upstream api_service { სერვერი 10.1.1.10:9051; სერვერი 10.1.1.77:9052; } რუკა $slow $limit_rate { 1 20k; 2 30 ათასი; } სერვერი { მოსმენა 80; server_name testapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; მდებარეობა / { try_files $uri $uri/ /index.html =404 =403 =500; } მდებარეობა /api { proxy_pass http://api_service; proxy_set_header X-Real-IP $remote_addr; proxy_set_header ჰოსტი $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; პროქსი_http_ვერსია 1.1; proxy_set_header განახლება $http_upgrade; proxy_set_header კავშირი "განახლება"; } მდებარეობა /დოკუმენტები { limit_rate $limit_rate; ლიმიტი_განზომილება 500 ათასის შემდეგ; } }
აქ არის კიდევ ერთი ნიმუშის კონფიგურაციის მაგალითი NGINX-ში გამტარუნარიანობის დინამიური შეზღუდვის საილუსტრაციოდ. ეს კონფიგურაცია საშუალებას აძლევს NGINX-ს შეზღუდოს გამტარობა TLS ვერსიის საფუძველზე. დირექტივა limit_rate_512-ის შემდეგ გულისხმობს ლიმიტის განაკვეთს სათაურების გაგზავნის შემდეგ.
upstream api_service { სერვერი 10.1.1.10:9051; სერვერი 10.1.1.77:9052; } რუკა $ssl_protocol $response_rate { "TLSv1.1" 50k; "TLSv1.2" 100k; "TLSv1.3" 500k; } სერვერი { მოსმენა 443 ssl; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_certificate /etc/ssl/testapp.crt; ssl_certificate_key /etc/ssl/testapp.key; მდებარეობა / { limit_rate $response_rate; # შეზღუდეთ გამტარუნარიანობა TLS ვერსიის ლიმიტის_სიჩქარის მიხედვით 512-ის შემდეგ; proxy_pass http://api_service; } }
ეს არის ყველაფერი, რაც ჩვენ გვქონდა თქვენთვის სერიალის ამ ნაწილში. ჩვენ გავაგრძელებთ უფრო მეტი თემის გაშუქებას NGINX მოძრაობის მართვა და უსაფრთხოების კონტროლი. მაგრამ ჩვეულებისამებრ, შეგიძლიათ დასვათ შეკითხვები ან გააზიაროთ თქვენი მოსაზრებები ამ სახელმძღვანელოს შესახებ ქვემოთ მოცემული გამოხმაურების ფორმის საშუალებით.
მითითება: უსაფრთხოების კონტროლის სახელმძღვანელო NGINX ვებსაიტზე.