Bạn có thể thiết lập Nginx để lưu các phản hồi vào bộ đệm, bao gồm các phản hồi có lỗi như 404. Tuy nhiên, theo như tôi biết, bạn không thể đếm số lượng lỗi (nhưng điều đó không quan trọng).
Vấn đề duy nhất ở đây là nếu bạn tạo một trang mới và trước đó nó đã được lưu trong bộ nhớ cache dưới dạng 404, thì nó sẽ không hoạt động. Ít nhất, không phải ngay lập tức (tùy thuộc vào thời gian chờ của bộ đệm của bạn).
Điều đó chắc chắn sẽ giúp rất nhiều, mặc dù. Nếu không, tất cả các lần truy cập sẽ chuyển đến chương trình phụ trợ của bạn và tạo lỗi 404 sẽ bị dừng ở phiên bản Nginx và lặp đi lặp lại chính xác lỗi 404 giống hệt nhau.
Một cách khác là xác định một vị trí và chạy một lệnh (sau đó có thể chạy ipset
để thêm địa chỉ IP). Vì vậy, một cái gì đó như:
vị trí /phpmyadmin.php {
content_by_lua_block {
os.execute("/usr/bin/block-ip.sh")
}
}
Tuy nhiên, tôi không chắc làm thế nào bạn có thể xử lý nhiều đường dẫn.
kinh nghiệm của riêng tôi với fail2ban
là nó khá chậm và "lạc hậu" (không chủ động). Tuy nhiên, nếu bạn thực sự muốn chặn hoàn toàn một địa chỉ IP, cách dễ nhất là có ứng dụng của bạn. gửi tin nhắn đến giao diện người dùng nơi bạn có thể chạy iptables
để chặn IP. Để làm được điều đó, bạn cần chuyển tiếp IP gốc mà Nginx không làm theo mặc định, nhưng thật dễ dàng để thêm một X-Forwarded-For
tiêu đề mà ứng dụng của bạn. sau đó có thể gửi lại cho công cụ nhỏ mà bạn đang sử dụng để thêm IP vào iptables
. Cũng lưu ý rằng bạn không nên thêm nó trực tiếp vào iptables
. Thay vào đó, bạn nên sử dụng một danh sách. Đối với cái nhìn đó ipset
.
Nếu bạn không thể thay đổi ứng dụng của mình như vậy và muốn sử dụng fail2ban
, bạn sẽ phải kiểm tra nhật ký Nginx và phát hiện những đường dẫn mà bạn không thích.