/ / Làm thế nào để đánh giá giới hạn các ứng dụng nhanh

Làm thế nào để đánh giá giới hạn các ứng dụng nhanh

woman holding nodejs sticker

Giới hạn tốc độ là một chiến lược bạn có thể sử dụng để kiểm soát lưu lượng truy cập trên mạng. Nó giới hạn số lượng yêu cầu mà người dùng có thể thực hiện trong một khung thời gian cụ thể.

Các thuật toán giới hạn tỷ giá khác nhau tồn tại, mỗi thuật toán có sự đánh đổi riêng. Một phương pháp đơn giản và phổ biến là theo dõi địa chỉ IP của các yêu cầu và kiểm tra thời gian trôi qua giữa các yêu cầu. Sau đó, hệ thống có thể từ chối một yêu cầu nếu địa chỉ IP của nó vượt quá số lượng yêu cầu mà giới hạn cho phép.

Cách tiếp cận để giới hạn tỷ lệ này dễ dàng xây dựng trong một ứng dụng NodeJS-Express, chỉ với một vài bước.

Bước 1: Thiết lập môi trường phát triển

Trước tiên, bạn sẽ cần tạo và khởi tạo một ứng dụng Express.

Bắt đầu bằng cách tạo một thư mục dự án bằng cách chạy:

mkdir express-app

Sau đó nhập thư mục đó bằng cách chạy:

cd express-app

Tiếp theo, khởi tạo npm, trình quản lý gói nút và tạo package.json tệp trong ứng dụng của bạn bằng cách chạy:

npm init -y

Các -y cờ sẽ tạo ra package.json tệp với tất cả các cài đặt mặc định.

Tiếp theo, bạn sẽ cần cài đặt một số phụ thuộc. Các phụ thuộc cần thiết cho hướng dẫn này là:

  • ExpressJS: ExpressJS là một khung công tác NodeJS cung cấp một tập hợp các tính năng mạnh mẽ cho các ứng dụng web và di động. Nó đơn giản hóa quá trình xây dựng các ứng dụng phụ trợ với NodeJS.
  • Giới hạn tốc độ nhanh: Giới hạn tốc độ nhanh là một phần mềm trung gian giới hạn tốc độ cho ExpressJS. Nó giới hạn các yêu cầu lặp lại đối với các API và / hoặc điểm cuối công khai, chẳng hạn như đặt lại mật khẩu, thông tin đăng nhập của người dùng, v.v.

Cài đặt các phụ thuộc bắt buộc bằng cách chạy:

npm install express express-rate-limit

Bước 2: Tạo ứng dụng Express

Bạn sẽ cần tạo một máy chủ Express cơ bản để lắng nghe các yêu cầu được gửi đến ứng dụng của bạn.

Đầu tiên, hãy tạo một index.js tệp trong thư mục gốc của dự án của bạn. Đây sẽ là tệp đầu vào cho ứng dụng của bạn.

Tiếp theo, thêm mã sau vào index.js tập tin:


const express = require("express");
const app = express();
const port = process.env.PORT || 3000

app.listen(port, () => {
console.log(`App running on port ${port}`);
});

Mã này nhập bày tỏ và tạo một ứng dụng Express bằng cách gọi express () và lưu trữ giá trị trả về của nó trong ứng dụng Biến đổi. Sau đó, nó sẽ lắng nghe lưu lượng truy cập trên cổng 3000 bằng cách gọi nghe phương pháp trên ứng dụng sự vật.

Bước 3: Tạo trình xử lý tuyến đường

Tiếp theo, tạo một số trình xử lý tuyến đường mà bạn có thể triển khai giải pháp giới hạn tốc độ.

Đầu tiên, tạo một thư mục, các tuyến đường, trong thư mục gốc của dự án của bạn bằng cách chạy:

mkdir routes

Tạo một tệp, route.jsbên trong thư mục tuyến đường của bạn và thêm mã sau:

const express = require("express");
const router = express.Router();

router.get("/", (req, res) => {
res.send({ message: "Hello, this is a GET request" });
});

router.post("/add-demo", (req, res) => {
res.status(201).send({ message: "Resource created successfully" });
});

router.put("/update-demo", (req, res) => {
res.status(201).send({ message: "Resource updated sucessfully" });
});

module.exports = router;

Mã này nhập bày tỏgọi Bộ định tuyến phương pháp trên bày tỏvà lưu trữ giá trị trong một biến, bộ định tuyến. Các Bộ định tuyến phương pháp này cho phép bạn tạo các trình xử lý tuyến đường có thể gắn kết theo mô-đun. Bạn có thể tạo trình xử lý tuyến đường cho một LẤY yêu cầu “/“, một BƯU KIỆN yêu cầu “/ add-demo”, Và một ĐẶT yêu cầu “/ update-demo”. Cuối cùng, xuất bộ định tuyến Biến đổi.

Tiếp theo, nhập bộ định tuyến biến trong bạn index.js tập tin:


const routes = require("./routes/routes");

Sau đó, sử dụng nó làm phần mềm trung gian trong tệp index.js của bạn:


app.use(routes);

Đảm bảo đặt khối mã ở trên trước app.listen cuộc gọi.

Bước 4: Thực hiện giới hạn tỷ lệ

Đầu tiên, hãy tạo một “phần mềm trung gian”Trong thư mục gốc của dự án của bạn bằng cách chạy:

mkdir middleware

Sau đó, tạo một tệp có tên “rate-limiter.js”Bên trong thư mục phần mềm trung gian. Thêm mã sau vào tệp này:


const rateLimiter = require("express-rate-limit");

const limiter = rateLimiter({
max: 5,
windowMS: 10000,
message: "You can't make any more requests at the moment. Try again later",
});

module.exports = limiter

Các rateLimiter hàm nhận một đối tượng cấu hình với các điều kiện để giới hạn số lượng yêu cầu.

Các thuộc tính trong đối tượng cấu hình ở trên là:

  • tối đa: Thuộc tính này phải luôn là một con số hoặc một hàm trả về một số. Nó đại diện cho số lượng yêu cầu tối đa mà người dùng có thể thực hiện trong một khung thời gian cụ thể. Nếu thuộc tính này không được đặt trong đối tượng cấu hình, thì nó sẽ mặc định là 5.
  • windowsMS: Thuộc tính này phải luôn là một số. Nó đại diện cho khung thời gian trong đó một số yêu cầu được phép trong mili giây. Nếu thuộc tính này không được đặt trong đối tượng cấu hình, thì nó sẽ mặc định là 60000 mili giây (một phút).
  • thông điệp: Thuộc tính này có thể là một sợi dây, một đối tượng JSON hoặc bất kỳ giá trị nào khác được hỗ trợ bởi phương thức response.send của Express. Nếu thuộc tính này không được đặt trong đối tượng cấu hình, thì thuộc tính này sẽ mặc định là “Quá nhiều yêu cầu. Vui lòng thử lại sau.”


Sau đó, chức năng sẽ kiểm tra các yêu cầu lặp lại đối với ứng dụng của bạn. Nếu người dùng vượt quá giới hạn (tối đa5) trong khung thời gian (windowMS, 10 giây), nó sẽ chặn yêu cầu. Nó cũng sẽ xuất hiện lỗi “Quá nhiều yêu cầu” với mã trạng thái là 429.

Cuối cùng, nhập hàm giới hạn trong index.js và áp dụng nó như một phần mềm trung gian toàn cầu trong ứng dụng của bạn. Làm điều này bằng cách đặt app.use (giới hạn) phía trên phần mềm trung gian của các tuyến đường. Điều này áp dụng giải pháp giới hạn tỷ lệ cho tất cả các tuyến ứng dụng của bạn.

app.use(limiter);

Giới hạn tỷ lệ các tuyến đường cụ thể

Bạn cũng có thể áp dụng giới hạn tỷ giá cho các tuyến đường cụ thể. Bạn có thể định cấu hình chúng một cách riêng biệt để từ chối các yêu cầu được thực hiện trong một khung thời gian khác, hiển thị một thông báo khác, v.v.

Ví dụ: giả sử bạn đang triển khai lộ trình đăng nhập người dùng trong ứng dụng của mình. Bạn có thể cần thêm cấu hình giới hạn tốc độ cho tuyến đường đăng nhập khác với cấu hình được sử dụng bởi các tuyến đường khác.

Trước tiên, bạn sẽ phải xóa người giới hạn như một phần mềm trung gian cấp ứng dụng và áp dụng nó vì không có hệ thống lọc phần mềm trung gian tích hợp trong ExpressJS. Vì vậy, ngay cả khi bạn thêm một giải pháp giới hạn tốc độ cụ thể vào một tuyến đường, phần mềm trung gian toàn cầu sẽ vẫn chạy trên tuyến đường đó.

Tiếp theo, tạo cấu hình giới hạn tỷ lệ mới trong rate-limiter.js tập tin và xuất nó.

const signInLimiter = rateLimiter({
max: 3,
windowMS: 10000,
message: "Too many sign-in attempts. Try again later."
})

module.exports = {
limiter,
signInLimiter
}

Các signInLimiter đối tượng cấu hình có một số lượng khác nhau tối đa yêu cầu và một thông báo lỗi khác từ bộ giới hạn tỷ lệ chung.

Cuối cùng, cập nhật router.js tệp với khối mã bên dưới:


const express = require("express");
const router = express.Router();
const {limiter, signInLimiter} = require("../middleware/rate-limiter")

router.get("/sign-in", signInLimiter, (req, res, next) => {
res.send({ message: "Hello, this is a GET request" });
});

router.use(limiter)

router.post("/post", (req, res) => {
res.status(201).send({ message: "Resource created successfully" });
});

router.put("/put", (req, res) => {
res.status(201).send({ message: "Resource updated sucessfully" });
});

module.exports = router;

Trong khối mã ở trên, bạn đã nhập người giới hạnsignInLimiter. Sau đó, bạn áp dụng signInLimiter như một bộ giới hạn tỷ lệ cụ thể cho “/đăng nhập” tuyến đường.

Cuối cùng, bằng cách đặt router.use (giới hạn) phía trên các tuyến đường còn lại, bạn đã áp dụng giới hạn làm giới hạn giá cước cho các tuyến còn lại.

Tầm quan trọng của việc giới hạn tỷ giá

Giới hạn tốc độ làm giảm sự căng thẳng trên máy chủ web của bạn bằng cách tránh phải xử lý quá nhiều yêu cầu cùng một lúc. Nó làm giảm hoạt động của bot, bảo vệ bạn khỏi các cuộc tấn công Từ chối Dịch vụ (DoS) và ngăn chặn các cuộc tấn công vũ phu.

Similar Posts

Leave a Reply

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