สิ่งที่ฉันต้องการ
สำหรับฉัน /แอดมิน ตำแหน่ง ไวท์ลิสต์ที่อยู่ IP ที่เชื่อถือได้หลายรายการ และบล็อกทุกคน
สิ่งที่ฉันมี
http {
แผนที่ $remote_addr $admin_block_path {
เริ่มต้น "/admin";
1.1.1.1 "/ไม่ใช่แอดมิน";
8.8.8.8 "/ไม่ใช่ผู้ดูแลระบบ";
}
# â¦
เซิร์ฟเวอร์ {
add_header X-Test-Admin "$admin_block_path";
ตำแหน่ง $admin_block_path {
กลับ 403;
}
}
}
ความคิดคือการ ใช้ แผนที่ กำหนดเส้นทางที่จะปิดกั้นจากที่อยู่ IP ของผู้เข้าชมอย่างมีเงื่อนไข เก็บไว้ในตัวแปรและใช้ตัวแปรนั้นใน ที่ตั้ง. หากคำขอมาจาก IP ที่ไม่น่าเชื่อถือ ตัวแปรจะประกอบด้วย /แอดมินและตำแหน่งจะถูกบล็อก /แอดมิน.
อะไรคือปัญหา
เดอะ ที่ตั้ง ไม่ปิดกั้นการเข้าถึง /แอดมิน.
- ฉันสามารถยืนยัน โดยใช้
add_header ว่าตัวแปรถูกตั้งค่าตามที่อยู่ IP อย่างถูกต้อง เมื่อเยี่ยมชมจาก IP ที่ไม่น่าเชื่อถือ ฉันจะได้รับ /แอดมินและตามลำดับ /ไม่ใช่แอดมิน เมื่อเยี่ยมชมจาก IP ที่เชื่อถือได้
- ถ้าฉันเปลี่ยน
ตำแหน่ง $admin_block_path ด้วยฮาร์ดโค้ด ตำแหน่ง/แอดมินคำขอจะถูกบล็อก
- ลองเล่น double quotes ก็ไม่มีผล
- พยายามใช้เครื่องหมายทับนอกตัวแปร ก็ไม่มีผล
บันทึก
ขออภัย ฉันไม่สามารถฮาร์ดโค้ดได้ อนุญาต/ปฏิเสธ ลงในบางส่วน /แอดมิน ที่ตั้งเพราะนั่นจะเขียนทับการกำหนดค่าผ่าน PHP ที่ฉันมีที่อื่นในการกำหนดค่า ด้วยเหตุนี้ฉันจึงต้องทุ่มเท /แอดมิน ตำแหน่งเฉพาะในกรณีที่ฉันรู้ว่าฉันจะปฏิเสธคำขอต่อไป และไม่จำเป็นต้องใช้ PHP
เวอร์ชั่น Nginx: 1.20.1