Score:0

รับ IP ผู้ร้องขอจริงในพร็อกซีย้อนกลับ NGINX ที่บรรจุในคอนเทนเนอร์

ธง ro

ฉันมี Docker Swarm stack ที่มี nginx เป็นพร็อกซีย้อนกลับที่ตั้งค่าบน OVH vps ฉันพยายามใช้คำสั่งอนุญาต/ปฏิเสธในตำแหน่งที่ตั้ง แต่ถ้าฉันตั้งค่าปฏิเสธทั้งหมด มันจะไม่ทำงานแม้แต่กับ ip ที่เพิ่มด้วยคำสั่ง allow หลังจากดูบันทึกการเข้าถึง ฉันพบว่าคำขอทั้งหมดที่ถูกกล่าวหาว่ามาจาก IP 10.0.0.2 ตอนนี้ฉันพยายามรับ IP จริงก่อนอย่างน้อยก็แสดงในบันทึก แต่ก็ไม่มีโชค มี nginx.conf ของฉัน:

เหตุการณ์{}

http {

  แผนที่ $http_upgrade $connection_upgrade {
    อัพเกรดเริ่มต้น;
    ''      ปิด;
  }
  ข้อมูล error_log /dev/stdout;
  log_format json_combined หนี = json
    '{'
      '"เวลา":"$time_local",'
      '"httpRequest":{'
        '"requestMethod":"$request_method",'
        '"requestUrl":"$scheme://$host$request_uri",'
        '"requestSize":$request_length,'
        '"สถานะ":"$สถานะ",'
        '"responseSize":$bytes_sent,'
        '"userAgent":"$http_user_agent",'
        '"remoteIp":"$remote_addr",'
        '"serverIp":"$server_addr",'
        '"ผู้อ้างอิง":"$http_referer",'
        '"เวลาแฝง":"${request_time}s",'
        '"โปรโตคอล":"$server_protocol"'
      '}'
    '}';

  ตัวแก้ไข 127.0.0.11 ถูกต้อง = 30 วินาที;

  รวม /etc/nginx/mime.types;
  รวม /etc/nginx/sites-enabled/*.*;
}

proxy.conf:

set_real_ip_ จาก 10.0.0.0/8;
real_ip_header X-ส่งต่อ-สำหรับ;
real_ip_recursive บน;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header โฮสต์ $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header อัพเกรด $http_upgrade;
proxy_set_header การเชื่อมต่อ $connection_upgrade;
proxy_set_header X-NginX-Proxy จริง;
proxy_cache_bypass $http_upgrade;
proxy_http_version 1.1;
proxy_read_timeout 20d;
ปิด proxy_buffering;
ปิด proxy_request_buffering;
เปิด proxy_intercept_errors;
http2_push_preload บน;

และตำแหน่งของฉัน:

  ตำแหน่ง /api/ {
     อนุญาต XXX.XX.XX.X;
     ปฏิเสธทั้งหมด
     รวม /etc/nginx/proxy-options/proxy.conf;
     ตั้ง $ocelot บริการ ocelot;
     proxy_pass http://$ocelot$uri$is_args$args;
     ปิด proxy_ssl_session_reuse;
     ปิด proxy_redirect;
     client_max_body_size 5M;
  }

ฉันจะทำอย่างไรให้ nginx บันทึก IP จริงของผู้ร้องขอ และถ้าเป็นไปได้ ให้ใช้ IP เพื่อเปรียบเทียบกับคำสั่ง allow

us flag
คุณตรวจสอบแล้วว่าเซิร์ฟเวอร์ที่เชื่อมต่อตั้งค่าส่วนหัว 'X-Forwarded-For' ถูกต้องหรือไม่
Pepsko avatar
ro flag
จริง ๆ แล้วฉันไม่รู้ว่าฉันจะตรวจสอบได้อย่างไร
us flag
คุณต้องค้นหาสิ่งนั้น ตรวจสอบซอฟต์แวร์ที่เชื่อมต่อกับ nginx นี้คืออะไร และตรวจสอบการกำหนดค่า
Pepsko avatar
ro flag
เพื่อให้แน่ใจ - คุณหมายถึงซอฟต์แวร์ที่ส่งคำขอไปยังพร็อกซี ไม่ใช่เซิร์ฟเวอร์ที่ซ่อนอยู่หลังพรอกซีใช่ไหม
Pepsko avatar
ro flag
จากการวิจัยเพิ่มเติมฉันพบว่าปัญหาเชื่อมต่อกับ nginx ที่ทำงานภายในคอนเทนเนอร์ในกลุ่มนักเทียบท่า ฉันเดาว่ามันเป็นตัวโหลดบาลานเซอร์ของ docker swarm ที่ตั้งค่า IP 10.0.0.2 ยังไม่พบวิธีแก้ไขปัญหานี้ เนื่องจากดูเหมือนว่า Swarm Load Balancer ไม่ได้ตั้งค่าส่วนหัว X-Forwarded-For
us flag
ที่อยู่ IP ไม่ได้ "ตั้งค่า" เมื่อเปิดการเชื่อมต่อ TCP ที่อยู่ IP ต้นทางจะเป็นที่อยู่ของเอนทิตีที่เชื่อมต่อ ในกรณีนี้ คุณต้องดูว่า Docker swarm สามารถตั้งค่าส่วนหัวได้หรือไม่
Pepsko avatar
ro flag
ใช่ มันเป็นเพียงทางลัดทางจิต อย่างไรก็ตาม ฉันจัดการเพื่อแก้ไขปัญหาได้แล้ว เนื่องจากเครือข่ายโอเวอร์เลย์จาก Docker Swarm ฉันต้องเรียกใช้บริการ nginx ในโหมดโฮสต์เพื่อแก้ไขปัญหา อย่างไรก็ตาม ขอบคุณสำหรับเวลาของคุณ
Score:0
ธง ro

ปัญหาเกิดจากเครือข่าย "โอเวอร์เลย์" เพิ่มเติมใน docker swarm; ฉันได้ข้ามสิ่งนี้โดยใช้เครือข่าย "โฮสต์"

บริการ:
  จิงซ์:
    ...
    พอร์ต:
      - เป้าหมาย: 80
        เผยแพร่: 80
        โปรโตคอล: tcp
        โหมด: โฮสต์
      - เป้าหมาย: 443
        เผยแพร่: 443
        โปรโตคอล: tcp
        โหมด: โฮสต์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา