Score:0

nginx proxy_pass ของโดเมนย่อยต่างๆ ไปยังตำแหน่งต่างๆ ภายในบล็อกเซิร์ฟเวอร์เดียว

ธง br
aag

วิธีการทั่วไปในการ reverse-proxying โดเมนย่อยต่างๆ ไปยังที่ต่างๆ ด้วย Nginx คือการติดตั้งเซิร์ฟเวอร์เฉพาะสำหรับแต่ละโดเมนย่อย ดังนี้:

เซิร์ฟเวอร์ {
    server_name subdomain1.example.com;
    ที่ตั้ง / {
        proxy_pass http://hostname1:port1;
    }
}
เซิร์ฟเวอร์ {
    server_name subdomain2.example.com;
    ที่ตั้ง / {
        proxy_pass http://hostname2:port2;
    }
}

เป็นไปได้หรือไม่ที่จะได้ผลลัพธ์เดียวกันภายในบล็อกเซิร์ฟเวอร์เดียว (เช่น server_name .example.com โดยไม่มีโดเมนย่อยที่ระบุ) โดยการระบุตำแหน่งที่แตกต่างกันภายในบล็อกเซิร์ฟเวอร์นั้น

Score:1
ธง jp

หากคุณระบุสถานที่ต่างกัน ผลลัพธ์จะไม่เหมือนกับที่คุณมีเหมือนกัน ที่ตั้ง / ในสอง เซิร์ฟเวอร์ บล็อก

aag avatar
br flag
aag
ขอบคุณที่สละเวลาตอบ ฉันอาจจะแสดงออกอย่างคลุมเครือเป้าหมายคือการย้อนกลับพร็อกซีโดเมนย่อยต่างๆ ซึ่งแต่ละโดเมนจะให้บริการโดยเซิร์ฟเวอร์ภายในที่แตกต่างกัน แทนที่จะติดตั้งเซิร์ฟเวอร์ nginx จำนวนมากซึ่งทำให้การกำหนดค่าเทอะทะ ฉันสงสัยว่าฉันสามารถระบุ "เซิร์ฟเวอร์ไวด์การ์ด" เดียวได้หรือไม่ ซึ่งจะส่งคำขอไปยังเซิร์ฟเวอร์ภายในที่ถูกต้องโดยขึ้นอยู่กับโดเมนย่อยที่ร้องขอ
jp flag
คุณสามารถใช้ตัวแปรเป็นพารามิเตอร์ `proxy_pass` ดู https://stackoverflow.com/questions/5743609/dynamic-proxy-pass-to-var-with-nginx-1-0
aag avatar
br flag
aag
ตอนนี้ฉันใช้ตัวแปรแล้ว แต่กลับกลายเป็นว่าฉันต้องประกาศกฎการเขียนซ้ำอย่างชัดเจน ฉันยังไม่ทราบวิธีการทำอย่างถูกต้อง
Score:1
ธง us

ใช่ มันเป็นไปได้

ขั้นแรก ให้ตั้งค่า ก แผนที่ เพื่อจับคู่โดเมนเข้ากับ proxy_pass จุดหมายปลายทาง:

แผนที่ $host $dest {
    www1.example.com 192.168.10.10:8001;
    www2.example.com 192.168.10.11:8002;
    ค่าเริ่มต้น 192.168.10.12;
}

เซิร์ฟเวอร์ {
    server_name *.example.com;

    proxy_pass http://$dest;
}

เมื่อ nginx ได้รับคำขอ มันจะไปที่ proxy_pass คำสั่ง จากนั้นจะแก้ไข $ปลายทาง ใช้ แผนที่ซึ่งจับคู่ชื่อโฮสต์เสมือนที่แตกต่างกันกับปลายทาง จากนั้น nginx พร็อกซีคำขอโดยใช้ปลายทางที่แก้ไข

อย่าลืมตั้งค่าปลายทางเริ่มต้นให้ถูกต้อง ทุกเว็บเซิร์ฟเวอร์สาธารณะได้รับการร้องขอสำหรับชื่อโดเมนทุกประเภท โดยทั่วไปคุณต้องการคืนค่า 404 บนโฮสต์เสมือนที่ไม่รู้จัก

aag avatar
br flag
aag
อัปเดต. ดูเหมือนว่า proxy_pass ไปยังตัวแปรต้องการกฎการเขียนใหม่ที่ชัดเจน ฉันกำลังเล่นกับกฎดังกล่าว แต่ฉันยังไม่เข้าใจ
us flag
คุณลองใช้ URL ปลายทางอื่นใน `แผนที่` หรือไม่ `icinga.example.com 10.10.10.7/icingaweb2` เป็นบรรทัด `map` หรือไม่ นอกจากนี้ คุณต้องตั้งค่า URL พื้นฐานให้ถูกต้องในการกำหนดค่าแอปพลิเคชันแต่ละรายการ
aag avatar
br flag
aag
ถ้า `icinga.example.com` ถูกแมปกับ `10.10.10.7/icingaweb2` ไคลเอ็นต์จะถูกส่งไปยังหน้า `https://icinga.example.com/icingaweb2/authentication/login` ที่ไม่มีอยู่
aag avatar
br flag
aag
เรียน @tero ฉันต้องกลับมาทำสิ่งนี้ โซลูชันของคุณใช้ได้กับการถ่ายโอนแบบ 1:1 อย่างง่าย อย่างไรก็ตาม เช่น `https://icinga.example.com` ควรเป็น proxy_passed ไปที่ `http://10.10.10.7/icingaweb2` ในขณะที่ `https://mail.example.com` ควรไปที่ `http://10.10.10.9 /iredmail/mail` เป็นต้น ฉันดูเหมือนจะเข้าใจว่าฉันต้องกำหนดบล็อกตำแหน่ง แต่สิ่งเหล่านั้นจะไม่ทำงานกับโดเมนย่อย คุณมีคำแนะนำเพิ่มเติมหรือไม่?
us flag
คุณแน่ใจหรือไม่ว่าคุณตั้งค่า URL รูทของแอปพลิเคชัน `icinga` ถูกต้อง

โพสต์คำตอบ

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