Score:0

จะส่งไซต์ html จากเซิร์ฟเวอร์อื่นผ่าน nginx reverse proxy ได้อย่างไร

ธง cn

ฉันกำลังพยายามโหลดแอปเชิงมุมจากบริการภายในอื่นเมื่อโทรหา localhost:81/internal?pageId=10 แต่สิ่งที่เกิดขึ้นคือ nginx เปลี่ยนเส้นทางฉันในเบราว์เซอร์ไปที่ localhost:80

ฉันมีการกำหนดค่านี้:

  ตำแหน่ง ~ / ภายใน (?<section>.+) {
    proxy_pass http://192.168.1.100:8080/public/internal$section;
    proxy_set_header โฮสต์ $host;
  }

ตามที่ฉันได้อ่านในคำถามอื่นๆ หลายข้อ นั่นน่าจะใช้ได้ แต่ด้วยเหตุผลบางอย่าง nginx เปลี่ยนเส้นทางฉันไปที่พอร์ต 80

ส่วนหัวของคำขอ:

รับ /ภายใน/?pageId=10
ยอมรับ: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3; คิว=0.9
ยอมรับการเข้ารหัส: gzip, deflate
ภาษาที่ยอมรับ: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
การเชื่อมต่อ: มีชีวิตอยู่
โฮสต์: localhost:81
คำขออัปเกรดที่ไม่ปลอดภัย: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML เช่น Gecko) Chrome/101.0.4951.67 Safari/537.36

ส่วนหัวของการตอบสนอง:

พบ HTTP/1.1 302
เซิร์ฟเวอร์: nginx/1.21.6
วันที่: พฤ. 19 พฤษภาคม 2565 09:15:34 GMT
การเข้ารหัสการถ่ายโอน: chunked
การเชื่อมต่อ: มีชีวิตอยู่
ที่ตั้ง: http://localhost/public/internal?pageId=10
X-ขับเคลื่อนโดย: Jetty(9.4.40.v20210413)

เป็นไปได้ไหม? และถ้าเป็นเช่นนั้นฉันจะแก้ไขได้อย่างไร

Ivan Shatsky avatar
gr flag
บางทีบริการภายในของคุณไม่ได้คาดหวังให้ส่วนหัว `Host` ถูกตั้งค่าเป็น `$host` (ซึ่งเท่ากับ `localhost:81` ในกรณีของคุณ) และคุณควรใช้ `proxy_set_header Host localhost;` แทน นอกจากนี้ วิธีที่คุณใช้สตริงการสืบค้นจะไม่ถูกส่งไปยังอัปสตรีม (เว้นแต่คุณจะเพิ่มส่วนต่อท้าย `$is_args$args` ต่อท้ายคำสั่ง `proxy_pass` ของคุณ)
Apollo avatar
cn flag
เซิร์ฟเวอร์ภายในไม่ตรวจสอบส่วนหัว ฉันเพิ่งคัดลอกบรรทัดที่พบใน StackExchange เพื่อให้แน่ใจว่าไม่มีปัญหา คุณช่วยยกตัวอย่างวิธีเพิ่ม $is_args$args ได้ไหม ฉันจะแทนที่ $section หรือไม่
Ivan Shatsky avatar
gr flag
ไม่ เพียงเพิ่มต่อท้าย URI ที่ส่งไปยังเซิร์ฟเวอร์ภายใน: `proxy_pass http://192.168.1.100:8080/public/internal$section$is_args$args;` คุณสามารถตรวจสอบว่าเกิดอะไรขึ้นเมื่อร้องขอ URI ที่ต้องการโดยตรงจากเซิร์ฟเวอร์ภายใน: `curl -v http://localhost/public/internal/?pageId=10`, `curl -v -H 'Host: localhost:81' http: //localhost/public/internal/?pageId=10` ตัวอย่างจากคำถามของคุณ (`localhost:81/internal?pageId=10`) ไม่ตรงกับส่วนหัวที่คุณระบุ (`localhost:81/internal/?pageId=10` โปรดสังเกตเครื่องหมายทับ) เว้นแต่จะมีการเขียนภายในใหม่เกิดขึ้นที่ไหนสักแห่งใน การกำหนดค่า nginx ของคุณ

โพสต์คำตอบ

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