Apache proxy_http เปลี่ยนเส้นทางไปยัง ip และตั้งชื่อโฮสต์


16

หวังว่าพวกคุณจะช่วยฉันด้วยปัญหาพร็อกซี่ที่ฉันมี

สิ่งที่ฉันมีอยู่แล้ว

ฉันได้ตั้งค่าพร็อกซีย้อนกลับ apache http ให้เป็นคำขอพร็อกซีจาก * .proxy.domain เป็น * .intern.domain apache เป็นวิธีเดียวที่จะเข้าถึงเว็บแอปพลิเคชันภายในของฉันจากเครือข่ายภายนอก

ตัวอย่าง:

app.proxy.domain -> app.intern.domain
mail.proxy.domain -> mail.intern.domain

ทั้งหมดนี้ใช้งานได้ดี แต่ฉันมีปัญหาดังต่อไปนี้

ปัญหา
ฉันต้องการพร็อกซี่คำขอต่อไปนี้:

app.proxy.domain -> app.internal.domain
app-dev.proxy.domain -> app-dev.internal.domain

นี่ไม่ใช่ปัญหา แต่น่าเสียดายที่เซิร์ฟเวอร์แอป dev รันสำเนาที่แน่นอนของ webapplication ของเซิร์ฟเวอร์แอปและ webapplication นี้จะตอบกลับเฉพาะชื่อโฮสต์ของมัน (app.intern.domain)

ดังนั้นสิ่งที่ฉันต้องทำคือพร็อกซีต่อไปนี้

app.proxy.domain -> app.internal.domain (10.0.1.1)
app-dev.proxy.domain -> app.internal.domain (10.0.1.2)

ฉันสามารถทำสิ่งที่สองโดยเพิ่ม "10.0.1.2 app.internal.domain" ใน / etc / hosts แต่นั่นก็หมายความว่า app.proxy.domain จะลงจอดบน dev-server

ฉันกำลังค้นหาตัวเลือกเพื่อตั้งค่ารายการ / etc / hosts ภายในไฟล์การกำหนดค่า vhost สำหรับ app-dev.proxy.domain ดังนั้นการกำหนดค่า vhost อื่น ๆ ทุกครั้งจะใช้ DNS สำหรับ app.intern.domain

ความคิด ...

มีวิธีที่จะบอกการกำหนดค่า apache ไปที่

ProxyPass / http://10.0.1.2/

แต่ส่ง app.intern.domain เป็นชื่อโฮสต์หรือไม่

การแก้ไขการใช้งานเว็บเซิร์ฟเวอร์ dev-dev เพื่อฟัง app-dev ไม่มีตัวเลือกเนื่องจากมันควรจะเป็นสำเนาที่แน่นอน (ไม่ใช่การตัดสินใจของฉัน ... )

ขอบคุณ!

คำตอบ:


34

อาจเป็นไปได้ว่าคุณสามารถใช้ mod_headers ร่วมกับ mod_proxy ฉันยังไม่ได้ทดสอบ

ดังนั้นสำหรับแอป-dev vhost คุณควรมี:

RequestHeader set Host "app.internal.domain"

แล้วคุณจะเพิ่ม:

ProxyPreserveHost On

2
การตั้งค่า ProxypreserveHost ทำได้อย่างสมบูรณ์แบบ ขอบคุณ!
Linux Nerd

3

การทำงานที่น่าเกลียดคือการใช้ (แทน: การละเมิด) / etc / hosts ให้ชี้ไปที่ app.internal.domain ไปยัง localhost แล้วกำหนดค่า Apache ให้ฟังสองพอร์ตเพิ่มเติมหนึ่งพอร์ตสำหรับแต่ละแอปและ app-dev ของคุณ ย้อนกลับพรอกซีสองครั้ง:

Listen 80
Listen 127.0.0.1:8001
Listen 127.0.0.1:8001

<VirtualHost *:80>
   ServerName app.proxy.domain
   ProxyPass / http://app.internal.domain:8001
</VirtualHost>
<VirtualHost *:80>
   ServerName app-dev.proxy.domain
   ProxyPass / http://app.internal.domain:8002
</VirtualHost>
<VirtualHost 127.0.0.1:8001>
   ServerName app.internal.domain
   ProxyPreserveHost On
   ProxyPass / http://10.0.1.1/
</VirtualHost>
<VirtualHost 127.0.0.1:8002>
   ServerName app.internal.domain
   ProxyPreserveHost On
   ProxyPass / http://10.0.1.2/
</VirtualHost>

2

เพิ่มเพื่อย้อนกลับการกำหนดค่าพร็อกซี (foe app-dev.proxy .. ):

RequestHeader edit Host ^app-dev.proxy.domain app.proxy.domain

คุณต้องเปิดใช้งาน mod_headers ล่วงหน้า:

a2enmod headers

เซิร์ฟเวอร์ภายใน 10.0.1.2 ควรมี

ServerName app.proxy.domain
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.