Score:0

อินสแตนซ์ AWS EC2 ที่อยู่เบื้องหลัง AWS ELB ไม่สามารถรับที่อยู่ IP ของไคลเอ็นต์จริงได้

ธง hm

ฉันใหม่มากกับการตั้งค่า nginx แอปพลิเคชัน API ของฉันทำงานในอินสแตนซ์ EC2 ซึ่งสร้างขึ้นโดยอัตโนมัติโดยสภาพแวดล้อม AWS Elastic Beanstalk ของฉัน แอปพลิเคชันใช้ Nginx และอินสแตนซ์อยู่หลังตัวจัดสรรภาระงาน ELB (คลาสสิก) เส้นทางโดเมน 53 กำหนดเส้นทางการรับส่งข้อมูลไปยัง ELB

ฉันส่งแพ็กเก็ตจากบุรุษไปรษณีย์หรือผู้ส่งแพ็กเก็ตไปยังโดเมนนั้น แต่ไม่สามารถรับการตอบกลับได้ หลังจากตรวจสอบบันทึกข้อผิดพลาด nginx พบว่า IP ไคลเอ็นต์แสดงเป็น 10.0.2.63แต่ไม่ใช่ที่อยู่ IP ของพีซีของฉัน ที่อยู่ IP จริงของฉัน 149.15x.1xx.2xx. ฉันคิดว่า 10.0.2.63 คือที่อยู่ IP ของ VPC ด้านล่างนี้คือบันทึกข้อผิดพลาด nginx

ขณะอ่านโปรโตคอล PROXY ลูกค้า: 10.0.2.63 เซิร์ฟเวอร์: 0.0.0.0:80

ตามความเข้าใจของฉัน เนื่องจาก IP ของไคลเอ็นต์คือที่อยู่ IP ของ VPC อินสแตนซ์ EC2 จึงไม่สามารถส่งการตอบกลับไปยังที่อยู่ IP ของไคลเอ็นต์จริงได้ (ที่อยู่ IP ของพีซีของฉัน) ดังนั้น Postmand หรือ Packet Sender จึงได้รับการตอบกลับที่ว่างเปล่า

ฉันเข้าใจถูกต้องหรือไม่? ฉันจะให้อินสแตนซ์ EC2 รับที่อยู่ IP ของไคลเอ็นต์จริงได้อย่างไร ชอบด้านล่าง:

ขณะอ่านโปรโตคอล PROXY ลูกค้า: 149.15x.1xx.2xx เซิร์ฟเวอร์: 0.0.0.0:80

ฉันไม่รู้ว่ามันเป็นปัญหากับการตั้งค่า AWS ELB หรือการตั้งค่า nginx

การกำหนดค่า nginx ในอินสแตนซ์ EC2 ของฉันคือ:

ไฟล์:
/etc/nginx/conf.d/proxy.conf:
เนื้อหา: |
  client_max_body_size 500M;
  server_names_hash_bucket_size 128;

  แบ็กเอนด์ต้นน้ำ {
    เซิร์ฟเวอร์ยูนิกซ์:///var/run/puma/my_app.sock;
  }

  เซิร์ฟเวอร์ {
    ฟัง 80 proxy_protocol;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    large_client_header_buffers 8 32k;

    set_real_ip_ จาก 10.0.0.0/8;
    real_ip_header X-ส่งต่อ-สำหรับ;

    ที่ตั้ง / {
      proxy_http_version 1.1;
      proxy_set_header X-Real-IP $proxy_protocol_addr;
      proxy_set_header X-Forwarded-For $proxy_protocol_addr;
      proxy_set_header โฮสต์ $http_host;
      proxy_set_header X-NginX-Proxy จริง;
      proxy_buffers 8 32k;
      proxy_buffer_size 64k;
      proxy_pass http://แบ็กเอนด์;
      ปิด proxy_redirect;

      # เปิดใช้งานการสนับสนุน WebSocket
      ตำแหน่ง /v1/เคเบิล {
        proxy_pass http://แบ็กเอนด์;
        proxy_http_version 1.1;
        proxy_set_header อัปเกรด "websocket";
        การเชื่อมต่อ proxy_set_header "อัปเกรด";
        proxy_set_header X-Real-IP $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
      }
    }
  }
Score:1
ธง gp
Tim

คุณได้รับ IP ไคลเอ็นต์จาก X-Forwarded-For ส่วนหัว. นี้ บล็อกโพสต์ AWS ให้การกำหนดค่าสำหรับบันทึก Apache และ Nginx นี่คือ Nginx

http {
  ...
  log_format main '$remote_addr - $remote_user [$time_local] "$request"'
                    '$สถานะ $body_bytes_sent "$http_referer"'
                    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log หลัก;
}

ฉันใช้ CloudFlare ต่อหน้าเซิร์ฟเวอร์ Nginx ของฉัน นี่คือวิธีที่ฉันแทนที่ CloudFlare IP ด้วย Client IP จริงคุณจะแทนที่ "CF-Connecting-IP" ด้วย "X-Forwarded-For" และแทนที่ IP CIDR เป็น CIDR ของ VPC ของคุณ

set_real_ip_ จาก 173.245.48.0/20;
real_ip_header CF-Connecting-IP;
lei lei avatar
hm flag
CIDR ของ VPC ของฉันคือ 10.0.0.0/16 ฉันเปลี่ยนการกำหนดค่าเป็น set_real_ip_ จาก 10.0.0.0/16; real_ip_header X-ส่งต่อ-สำหรับ; แต่ในบันทึกข้อผิดพลาดยังคงเห็นที่อยู่ IP ของไคลเอ็นต์ไม่ใช่ที่อยู่ IP จริง ...ขณะอ่านโปรโตคอล PROXY ไคลเอ็นต์: 10.0.2.63 เซิร์ฟเวอร์: 0.0.0.0:80 ฉันจะรับที่อยู่ IP จริงแสดงในไคลเอ็นต์ได้อย่างไร
Tim avatar
gp flag
Tim
หากนั่นไม่ได้ผล ฉันจะต้องเล่นกับมันเพื่อทำให้มันออกมาดี กุญแจสำคัญคือการได้รับ IP ที่ถูกต้องจากส่วนหัวที่ฉันอธิบายไว้ข้างต้น คุณจะทำอย่างไรและจะไปที่ไหนนั้นคุณต้องพิจารณา หวังว่าคนอื่นจะช่วยได้ ฉันไม่ได้ทำอะไรมากมายกับ Nginx อีกต่อไป

โพสต์คำตอบ

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