สิ่งที่ฉันต้องการ
สำหรับฉัน /แอดมิน
ตำแหน่ง ไวท์ลิสต์ที่อยู่ 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