Apache ProxyPass ตามชื่อโฮสต์แบบไดนามิก


1

ฉันพยายามกำหนดค่า Apache เป็นพร็อกซีไปยังเซิร์ฟเวอร์ภายในโดยยึดตามชื่อโฮสต์แบบไดนามิกและใช้พอร์ตอื่น ดูเหมือนจะซับซ้อนเกินไปสำหรับฉันเล็กน้อย นี่คือสิ่งที่ฉันมี:

<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>

แต่นี่เป็น (เห็นได้ชัด) ไม่ใช่แบบไดนามิก ฉันทำงานเกี่ยวกับการเขียนกฎเป็นต้น แต่ฉันไม่สามารถทำงานได้ สิ่งที่ฉันต้องการจริงๆคืออะไร:

^/[internalservername]/awesomewebapp
      proxy internally to
http://[internalservername]:8080/awesomewebapp

ขอบคุณล่วงหน้า

คำตอบ:


0

คุณสามารถใช้ RewriteRule เพื่อส่งคำขอ เอกสารสำหรับการใช้ Apache mod_rewrite เป็นพร็อกซีแสดงให้เห็นต่อไปนี้:

รายละเอียด:

mod_rewrite จัดเตรียมการตั้งค่าสถานะ [P] ซึ่งอนุญาตให้ส่งผ่าน URL ผ่าน mod_proxy ไปยังเซิร์ฟเวอร์อื่น มีตัวอย่างสองตัวอย่างให้ที่นี่ ในตัวอย่างหนึ่ง URL จะถูกส่งโดยตรงไปยังเซิร์ฟเวอร์อื่นและให้บริการเสมือนเป็น URL ในตัวเครื่อง ในตัวอย่างอื่นเราพร็อกซีไม่มีเนื้อหาไปยังเซิร์ฟเวอร์ส่วนหลัง

วิธีการแก้:

ในการจับคู่ URL กับเซิร์ฟเวอร์อื่นเราใช้การตั้งค่าสถานะ [P] ดังนี้:

RewriteEngine บน RewriteBase "/ products /" RewriteRule "^ widget /(.*)$" " http://product.example.com/widget/ $ 1" [P] ProxyPassReverse "/ ผลิตภัณฑ์ / widget /" " http: // product.example.com/widget/ "

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

RewriteCond "% {REQUEST_FILENAME}"! -f RewriteCond "% {REQUEST_FILENAME}"! -d RewriteRule "^ / (. *)" " http://old.example.com/ $ 1" [P] ProxyPassReverse "/" " http://old.example.com/ "

ตัวอย่างที่สองการเขียน URL ซ้ำตามเงื่อนไขด้วยการตั้งค่าสถานะ [P] ไปยังพรอกซีคำขอดูเหมือนจะเป็นสิ่งที่คุณต้องการ


ทำงานกับสิ่งนี้ แต่ดูเหมือนว่า ProxyPassReverse ลบโฮสต์ออกจาก url ตอนนี้ URL เต็ม "http: // [publicdomain] / [internalhostname] / awesomewebapp" เปลี่ยนเส้นทางไปที่ "http: // [internalhostname] / awesomewebapp" อย่างถูกต้อง แต่จากนั้นจะส่งคืนสู่สาธารณะเป็น "http: // [publicdomain] / awesomewebapp "ไม่มีชื่อโฮสต์ภายในในพา ธ
JCS81

0

"โซลูชัน" ก่อนหน้าของฉันยังทำงานไม่ถูกต้องดังนั้นฉันจึงลบเพื่อป้องกันความสับสน ดูเหมือนจะไม่เป็นไปได้ตามที่ฉันต้องการ แต่การแก้ปัญหาเล็ก ๆ โดยใช้โดเมนย่อยแทนที่จะเป็นไดเรกทอรีย่อยยังคงทำให้มันสั่นสะเทือน

RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]

ที่มา: http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html

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