Những gì tôi muốn
cho tôi /quản trị viên
vị trí, đưa vào danh sách trắng một số địa chỉ IP đáng tin cậy và chặn mọi người khác.
Tôi có gì
http {
bản đồ $remote_addr $admin_block_path {
mặc định "/ quản trị viên";
1.1.1.1 "/not-admin";
8.8.8.8 "/not-admin";
}
# â¦
người phục vụ {
add_header X-Test-Admin "$admin_block_path";
vị trí $admin_block_path {
trả lại 403;
}
}
}
Ý tưởng là để sử dụng bản đồ
xác định có điều kiện đường dẫn để chặn từ địa chỉ IP của khách truy cập. Lưu trữ nó trong một biến và sử dụng biến đó trong địa điểm
. Nếu yêu cầu đến từ một IP không đáng tin cậy, biến sẽ chứa /quản trị viên
, và do đó vị trí sẽ chặn /quản trị viên
.
vấn đề là gì
Các địa điểm
không chặn truy cập vào /quản trị viên
.
- Tôi có thể xác nhận sử dụng
add_header
rằng biến được đặt chính xác dựa trên địa chỉ IP. Khi truy cập từ một IP không đáng tin cậy, tôi nhận được /quản trị viên
, và tương ứng /không phải quản trị viên
khi truy cập từ một IP đáng tin cậy.
- Nếu tôi thay thế
vị trí $admin_block_path
với mã hóa cứng vị trí / quản trị viên
, yêu cầu không bị chặn
- Đã thử chơi với dấu ngoặc kép, không có hiệu lực
- Đã thử lấy dấu gạch chéo bên ngoài biến, không có tác dụng
Ghi chú
Thật không may, tôi không thể mã hóa đơn giản cho phép
/phủ nhận
vào một số /quản trị viên
location vì điều đó sẽ ghi đè cấu hình vượt qua PHP mà tôi có ở nơi khác trong tệp config. Vì điều này, tôi cần phải có một chuyên dụng /quản trị viên
chỉ vị trí nếu tôi biết dù sao thì tôi cũng sẽ từ chối yêu cầu và không cần PHP.
Phiên bản Nginx: 1.20.1