เปลี่ยนเส้นทางย่อยไปยังโฮสต์ภายนอกด้วย Nginx


14

ฉันต้องสร้างแผนที่ง่าย ๆ ใน Nginx ที่เปลี่ยนเส้นทาง subpath ไปยังเซิร์ฟเวอร์อื่นที่อยู่ใน subnet เดียวกัน

  • เซิร์ฟเวอร์ Nginx: 192.168.0.2
  • เซิร์ฟเวอร์ Tomcat: 192.168.0.3:8443

ฉันพยายามใส่สิ่งนี้ในส่วนเซิร์ฟเวอร์

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

แต่ทั้งหมดที่ฉันได้รับการเข้าถึงhttp://www.myservice.com/tomcatapi/เป็นหน้าข้อผิดพลาด 500 และในแฟ้มบันทึก nginx ฉันมีข้อผิดพลาดนี้:

    the rewritten URI has a zero length

สิ่งที่ฉันขาดหายไปในความเชื่อมั่นนี้?

คำตอบ:


13

ลองดูบรรทัดการเขียนใหม่ของคุณ:

rewrite /tomcatapi/(.*) $1 break;

คุณกำลังสละบิตในวงเล็บ (เช่นทุกอย่างหลังจาก/tomcatapi/) ซึ่งได้รับมอบหมาย$1และใช้สิ่งนั้นเป็นเนื้อหาของ URI ที่เขียนใหม่ของคุณ

ในตัวอย่างของคุณไม่มีอะไร/tomcatapi/ใหม่ดังนั้นการเขียนซ้ำจึงกลายเป็นสิ่งที่ว่างเปล่าและนี่คือสิ่งที่ nginx คร่ำครวญ

หากคุณเปลี่ยนกฎการเขียนซ้ำเป็น

rewrite /tomcatapi/(.*) /$1 break;

จากนั้นคุณจะต้องจบลงอย่างน้อย/ในเอาต์พุตการเขียนซ้ำ


ขอบคุณสำหรับการตอบกลับฉันยังเพิ่ม "/" แต่ตอนนี้การเข้าถึง url เบราว์เซอร์ติดอยู่ในสถานะการโหลดและในล็อกไฟล์ฉันเห็นตอนนี้ข้อผิดพลาดที่แตกต่างกัน: อัปสตรีมส่งไม่มีส่วนหัว HTTP / 1.0 ที่ถูกต้อง
carlo.polisini

บันทึกในเซิร์ฟเวอร์ Tomcat ของคุณพูดว่าอะไร
Flup

ฉันพบข้อผิดพลาดข้อผิดพลาดคือแอปมีให้บริการที่ https เท่านั้นไม่ใช่ http! ดังนั้นไวยากรณ์จึงเกิดขึ้นหลังจากการแก้ไขของคุณเพียงแค่แทนที่ http ด้วย https เพื่อให้ทำงานได้
carlo.polisini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.