Score:0

พร็อกซีย้อนกลับ NGINX ไม่ทำงานกับ swagger-ui-express

ธง in

ฉันใช้ NGINX เพื่อ proxy_pass คำขอทั้งหมดที่มีคำนำหน้า /รับรองความถูกต้อง/ ไปยังเซิร์ฟเวอร์ nodejs api ที่ localhost:3000.

ฉันมีไฟล์ปรับแต่งเดียวนี้ /etc/nginx/sites-enabled/default3.conf:

เซิร์ฟเวอร์ {
    
    ตำแหน่ง /auth/ {
        เขียนใหม่ /auth/(.+) /$1 ตัวแบ่ง;
        proxy_pass http://127.0.0.1:3000;
        ปิด proxy_redirect;
        proxy_set_header โฮสต์ $host;
    }


}

มันใช้งานได้ดีสำหรับคำขอส่วนใหญ่ของฉัน (แทนที่จะเป็น GET http://localhost:3000/logout, รับ http://localhost/auth/logout จะทำงานตามที่คาดไว้) ยกเว้นคำขอนี้ GET http://localhost/auth/docsซึ่งควรแมปกับ http://localhost:3000/docs แต่ฉันได้รับการเปลี่ยนเส้นทาง:

HTTP/1.1 301 ย้ายอย่างถาวร
เซิร์ฟเวอร์: nginx/1.18.0 (Ubuntu)
วันที่: วันพุธที่ 15 ธันวาคม 2021 01:59:02 GMT
ประเภทเนื้อหา: text/html; ชุดอักขระ = UTF-8
ความยาวเนื้อหา: 175
X-ขับเคลื่อนโดย: Express
การควบคุมการเข้าถึงอนุญาตแหล่งกำเนิด: *
นโยบายความปลอดภัยเนื้อหา: default-src 'ไม่มี'
X-Content-Type-Options: ไร้สาระ
ที่อยู่: /docs/

จากนั้นไม่พบ 404 แทน:

ไม่พบ HTTP/1.1 404
เซิร์ฟเวอร์: nginx/1.18.0 (Ubuntu)
วันที่: วันพุธที่ 15 ธันวาคม 2021 03:20:26 GMT
ประเภทเนื้อหา: text/html
การเข้ารหัสการถ่ายโอน: chunked
การเชื่อมต่อ: มีชีวิตอยู่
การเข้ารหัสเนื้อหา: gzip

ดูเหมือนว่าเมื่อฉันได้รับ http://localhost/auth/docsคำขอถึงเซิร์ฟเวอร์ nodejs ของฉัน แต่จากนั้นถูกเปลี่ยนเส้นทางกลับไปที่ http://localhost/docsแต่สิ่งนี้จะเป็นไปได้อย่างไร? ฉันยังสามารถรับได้ http://localhost:3000/docs โดยไม่มีปัญหา

ปรับปรุง

http://localhost:3000/docs เป็นที่ที่ฉันให้บริการ Swagger UI สำหรับเซิร์ฟเวอร์ API โดยใช้โมดูล npm ผยอง-UI-ด่วน.

in flag
เป็นไปได้มากว่าเซิร์ฟเวอร์ nodejs ของคุณไม่ได้กำหนดค่าด้วย URL พื้นฐานที่ถูกต้อง และสร้างการเปลี่ยนเส้นทางที่ผิดพลาด
xceeded avatar
in flag
ใช่คุณพูดถูก. มันมีปัญหากับแอป nodejs ของฉัน นั่นคือโมดูล `swagger-ui-express` ฉันยังคงพยายามที่จะแก้ไขมัน
Score:0
ธง in

ปัญหา

  • ปัญหาอยู่ในโมดูล ผยอง-UI-ด่วน ซึ่งเซิร์ฟเวอร์ nodejs ของฉันใช้เพื่อให้บริการเอกสาร API
  • ฉันกำหนดค่าให้แสดงบน /เอกสาร และโมดูลจะทำการเปลี่ยนเส้นทาง 301 เพื่อทำการร้องขออย่างแน่นอน $HOST/เอกสารสำหรับ HOST คืออะไรก็ตามที่โฮสต์ร้องขอ (localhost:3000, หรือ โลคัลโฮสต์).
  • ดังนั้นเมื่อใส่ NGINX reverse proxy เหมือนที่ฉันทำ ทุกๆ GET http://localhost/auth/docs จะตีเซิร์ฟเวอร์ nodejs ของฉัน แต่จะถูกเปลี่ยนเส้นทางไปที่ http://localhost/docs อย่างที่ฉันพูดในหัวข้อย่อย 2

การแก้ไขปัญหา

  • กำหนดค่า NGINX เพื่อสร้าง proxy_pass ใหม่เมื่อคำขอตรงกัน /docs/.
    ตำแหน่ง /docs/ {
        proxy_pass http://127.0.0.1:3000/docs/;
    }
  • ระวัง URI ที่ถูกส่งผ่านไปมี เครื่องหมายทับเนื่องจากโมดูล ผยอง-UI-ด่วน คาดว่าเครื่องหมายทับ มิฉะนั้น /auth/docs จะถูกเปลี่ยนเส้นทางไปที่ /docs/ และ /docs/ จะถูกเปลี่ยนเส้นทางไปที่ /auth/docs อีกครั้ง (วนซ้ำไม่สิ้นสุดจนกว่าจะเกิดข้อผิดพลาด) แม้ว่าจะเป็นเรื่องปกติที่จะลบเครื่องหมายทับต่อท้ายทั้งในการจับคู่ตำแหน่งและ URL ของ Proxy Pass

โพสต์คำตอบ

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