Trang web được phát triển bằng - keo truc tiep

/imgposts/hazv8x4r.jpg

Thực tế thì biểu hiện không phải là trang web trực tiếp báo lỗi 503. Đây là một công cụ tạo mã QR trực tuyến được phát triển bằng VueJS với phần backend sử dụng ASP.NET Core. Thỉnh thoảng, tôi nhận thấy các biến Vue không được hiển thị đúng cách. Theo như tôi nhớ, trong một tuần đã gặp tình trạng này khoảng ba lần. Hôm nay khi sử dụng trang này, vấn đề lại xảy ra. Không thể trì hoãn thêm nữa, bây giờ tôi quyết định bắt đầu kiểm tra ngay lập tức. Từ cửa sổ gỡ lỗi của trình duyệt, tôi có thể nhìn thấy rằng thực tế lỗi xuất hiện khi tải một tệp JS, và lúc đó báo lỗi 503. Chúng ta biết rằng mã trạng thái HTTP 503 có nghĩa là:

Máy chủ quá tải: Khi máy chủ nhận được số lượng yêu cầu vượt quá khả năng xử lý của nó, có thể sẽ trả về lỗi HTTP 503. Thông thường, lỗi này xảy ra sau khi áp dụng giới hạn tốc độ yêu cầu (rate limiting), vì mọi người thường không sử dụng mã 429 để thông báo trực tiếp rằng có quá nhiều yêu cầu.

Do trang web này chưa bao giờ gặp lỗi 503 trước đây, chỉ bắt đầu từ khi sử dụng ASP.NET, tôi đã nghĩ ngay rằng có lẽ middleware giới hạn tốc độ mặc định của ASP.NET đã được b29 club kích hoạt. Tuy nhiên, nguyên nhân thực sự không phải vậy. Nguyên nhân chính là gần đây CDN cho tệp tĩnh bị lỗi và đã bị đưa vào danh sách đen bởi các tiện ích chặn quảng cáo (adblock). Vì vậy, tôi buộc phải chuyển tất cả các tệp CSS và JS thông dụng lên lưu trữ trực tiếp trên máy chủ. Điều này dẫn đến việc mỗi khi mở một trang, máy chủ sẽ nhận được gần 10 yêu cầu cùng lúc. Và điều này đã kích hoạt quy tắc giới hạn tốc độ mà tôi đã cấu hình trước đó trong Nginx.

limit_req_zone $binary_remote_addr zone=one:10m rate=8r/s;
limit_req zone=one [soi keo truc tiep](https://www.wengchu.com)  burst=5;

Tham khảo: Tài liệu trước đây của tôi về cách hạn chế người dùng độc hại spam trang web - Quy tắc giới hạn tốc độ của Nginx. Cụ thể, nếu cùng một IP gửi hơn 8 yêu cầu mỗi giây, máy chủ sẽ áp dụng giới hạn tốc độ và báo lỗi 503. Vì vậy, tôi đã tăng ngưỡng giới hạn lên 12 yêu cầu mỗi giây.

limit_req_zone $binary_remote_addr zone=one:10m rate=12r/s;

Sau khi xem qua tài liệu chính thức:

Tôi không tìm thấy bất kỳ thông tin nào nói rằng chức năng này được kích hoạt mặc định. Hơn nữa, trong file Program.cs cũng không có bất kỳ cấu hình liên quan nào.

> grep RateLimit -r ./
Tập tin nhị phân ./bin/Debug/net8.0/dotnet_tool.pdb khớp
Tập tin nhị phân ./bin/Release/net8.0/dotnet_tool.pdb khớp
Tập tin nhị phân ./bin/Release/net8.0/publish/dotnet_tool.pdb khớp
Tập tin nhị phân ./obj/Debug/net8.0/dotnet_tool.pdb khớp
Tập tin nhị phân ./obj/Release/net8.0/dotnet_tool.pdb khớp

Như vậy, lỗi 503 không phải do ASP.NET tự động keo truc tiep kích hoạt middleware giới hạn tốc độ mà là do cấu hình giới hạn tốc độ trong Nginx không phù hợp với nhu cầu hiện tại của ứng dụng.