ฉันต้องการจำกัดการเข้าถึงเพียงหนึ่งการเชื่อมต่อต่อ IP
ตัวอย่างโค้ดที่ฉันใช้จากหน้าอย่างเป็นทางการ:
ตั้งค่าโซนหน่วยความจำที่ใช้ร่วมกันและจำนวนการเชื่อมต่อสูงสุดที่อนุญาตสำหรับค่าคีย์ที่กำหนดเมื่อเกินขีดจำกัดนี้ เซิร์ฟเวอร์จะส่งกลับข้อผิดพลาดในการตอบกลับคำขอ ตัวอย่างเช่น คำสั่ง
limit_conn_zone $binary_remote_addr โซน = addr:10m;
เซิร์ฟเวอร์ {
ตำแหน่ง /ดาวน์โหลด/ {
limit_conn เพิ่ม 1;
}
อนุญาตการเชื่อมต่อเพียงครั้งเดียวต่อที่อยู่ IP ในแต่ละครั้ง
ฉันใช้ nginx ภายในคอนเทนเนอร์นักเทียบท่า และนี่คือ default.conf:
limit_conn_zone $binary_remote_addr โซน = addr:10m;
รูท /usr/share/nginx/html;
เซิร์ฟเวอร์ {
ฟัง 8080;
ตำแหน่ง /ดาวน์โหลด/ {
limit_conn เพิ่ม 1;
เปิดดัชนีอัตโนมัติ;
}
}
นี่คือลิงค์ที่อธิบายวิธีทดสอบว่าข้อ จำกัด IP ใช้งานได้หรือไม่:
https://blog.actorsfit.com/a?ID=00700-9f36887c-5d4b-4f0e-baf5-725ff22f2e42
คำสั่ง curl ที่ฉันใช้:
ขด -v http://192.168.0.13:8080/downloads/ http://192.168.0.13:8080/downloads/
การตอบสนอง:
* ลอง 192.168.0.13:8080...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับพอร์ต 192.168.0.13 (192.168.0.13) 8080 (#0)
> รับ /ดาวน์โหลด/ HTTP/1.1
> โฮสต์: 192.168.0.13:8080
> User-Agent: curl/7.68.0
> ยอมรับ: */*
>
* ทำเครื่องหมายที่บันเดิลว่าไม่รองรับการใช้งานหลายอย่าง
< HTTP/1.1 200 ตกลง
< เซิร์ฟเวอร์: nginx/1.21.4
< วันที่: อา. 28 พ.ย. 2564 11:53:36 GMT
< ประเภทเนื้อหา: text/html
< การเข้ารหัสการถ่ายโอน: chunked
< การเชื่อมต่อ: รักษาชีวิต
<
<html>
<head><title>ดัชนีของ /downloads/</title></head>
<เนื้อหา>
<h1>ดัชนีของ /ดาวน์โหลด/</h1><hr><pre><a href="../">../</a>
<a href="text">ข้อความ</a> 28-พฤศจิกายน-2564 10:51 2
</pre><hr></body>
</html>
* การเชื่อมต่อ #0 ไปยังโฮสต์ 192.168.0.13 ยังคงอยู่
* พบบันเดิลสำหรับโฮสต์ 192.168.0.13: 0x55e1cd185b50 [ซีเรียล]
* มัลติเพล็กซ์ไม่ได้แม้ว่าเราต้องการ!
* ใช้การเชื่อมต่อที่มีอยู่อีกครั้ง! (#0) กับโฮสต์ 192.168.0.13
* เชื่อมต่อกับพอร์ต 192.168.0.13 (192.168.0.13) 8080 (#0)
> รับ /ดาวน์โหลด/ HTTP/1.1
> โฮสต์: 192.168.0.13:8080
> User-Agent: curl/7.68.0
> ยอมรับ: */*
>
* ทำเครื่องหมายที่บันเดิลว่าไม่รองรับการใช้งานหลายอย่าง
< HTTP/1.1 200 ตกลง
< เซิร์ฟเวอร์: nginx/1.21.4
< วันที่: อา. 28 พ.ย. 2564 11:53:36 GMT
< ประเภทเนื้อหา: text/html
< การเข้ารหัสการถ่ายโอน: chunked
< การเชื่อมต่อ: รักษาชีวิต
<
<html>
<head><title>ดัชนีของ /downloads/</title></head>
<เนื้อหา>
<h1>ดัชนีของ /ดาวน์โหลด/</h1><hr><pre><a href="../">../</a>
<a href="text">ข้อความ</a> 28-พฤศจิกายน-2564 10:51 2
</pre><hr></body>
</html>
* การเชื่อมต่อ #0 ไปยังโฮสต์ 192.168.0.13 ยังคงอยู่
บันทึก Nginx:
192.168.0.3 - - [28/พ.ย./2021:11:53:36 +0000] "GET /downloads/ HTTP/1.1" 200 276 "-" "curl/7.68.0" "-"
192.168.0.3 - - [28/พ.ย./2021:11:53:36 +0000] "GET /downloads/ HTTP/1.1" 200 276 "-" "curl/7.68.0" "-"
ฉันลองแบบเดียวกันกับ telnet และได้ผลเหมือนเดิม ฉันสามารถเข้าถึงเซิร์ฟเวอร์ได้หลายครั้งจาก IP เดียวกัน