ฉันกำลังพยายามตั้งค่าโดเมนย่อยสองโดเมนสำหรับ ก
และ ข
ใน โดเมน.คอม
. ฉันใช้ไฟล์ .conf สองไฟล์ ซึ่งมีลักษณะค่อนข้างเหมือนกันตามการเปลี่ยนแปลงของ ServerName และ ProxyPass:
<VirtualHost *:80>
ServerName a.domain.com #This was added as a try for a fix.
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/a
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
ProxyPass / https://a.domain.com:8444/
ProxyPassReverse / https://a.domain.com:8444/
ProxyPass /a/ https://a.domain.com:8444/
ProxyPassReverse /a/ https://a.domain.com:8444/
ProxyPass /b/ https://b.domain.com:8445/
ProxyPassReverse /b/ https://b.domain.com:8445/
</VirtualHost>
สิ่งนี้กำลังดำเนินการในสภาพแวดล้อมการทดสอบของฉัน โดยจำลองสิ่งที่คล้ายกับสิ่งที่กำลังผลิตอยู่ ใน /etc/hosts ฉันเพิ่ม a.domain.com
และ b.domain.com
เป็น 127.0.0.1 DNS ในการผลิตมีบันทึกสำหรับอะไร a.domain.com
และ b.domain.com
ซึ่งเป็น IP เดียวกัน (ฉันทำสิ่งนี้ในเครื่องที่ฉันกำลังทดสอบด้วย)
โปรดทราบว่าฉันไม่ได้ให้บริการเนื้อหาใด ๆ จากไดเร็กทอรีรูทของพวกเขา ฉันเพิ่มที่พยายามแก้ไขปัญหาที่ระบุไว้ในชื่อเรื่อง มี html อย่างง่ายในทั้งสองไดเร็กทอรี
ปัญหาที่แท้จริงคืออะไร?
เพียงแค่เมื่อพยายาม a.domain.com
ผลลัพธ์คือเว็บแอปจาก localhost:8444
, อย่างที่คาดไว้. เมื่อพยายาม b.domain.com
, ผลลัพธ์ก็เช่นกัน localhost:8444
, แทน localhost:8445
. ทั้งคู่ ก.conf
และ ข.conf
เปิดใช้งานอยู่ และถ้าฉันปิดใช้งาน ก.conf
แล้วฉันถูกต้องได้รับ localhost:8445
. ถ้าฉันยังลองเช่น a.domain.com/b
การเปลี่ยนเส้นทางจะแก้ไขกลับไปที่ a.domain.com
.
ฉันได้อ่านคำถามและบทช่วยสอนหลายข้อ และส่วนใหญ่มีบางอย่างที่ทำงานเหมือนกับการกำหนดค่าของฉัน หรือเพิ่ม NameVirtualHost ซึ่งฉันเข้าใจว่าไม่จำเป็นสำหรับ Apache เวอร์ชันของฉันฉันยังเพิ่มชื่อเซิร์ฟเวอร์ในพอร์ต 80 เพราะฉันคิดว่าอาจเป็นคำขอสำหรับ ข
ถูกจับคู่โดย ก.conf
เนื่องจากเป็น IP เดียวกัน แต่ก็ไม่ได้ผลเช่นกัน
ฉันพลาดอะไรไปที่นี่? มีบางอย่างกับ mod_proxy ที่ฉันดูเหมือนจะเพิกเฉยหรือไม่? ถ้าเป็นไปได้ ฉันต้องการเก็บหนึ่งไฟล์ต่อหนึ่งเว็บแอป ขอบคุณ!
ข้อมูลนี้อยู่ใน Ubuntu 18.04.2, Apache 2.4 (mod_proxy และ mod_ssl), Tomcat 9 หากต้องการข้อมูลอื่นๆ เราจะพยายามจัดส่งให้อย่างเต็มที่
อัปเดต
พยายามด้วยการกำหนดค่านี้ด้วย ผลลัพธ์ที่ไม่ต้องการเหมือนกัน
<VirtualHost *:80>
ServerAlias a.domain.com
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
Redirect /b https://b.domain.com
<Location />
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
<Location /a>
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
</VirtualHost>
อัปเดต
ตกลง ฉันเพิ่งพบบางสิ่งที่น่ารำคาญมาก ถ้าฉันเข้าด้วยเบราว์เซอร์ของฉันเพื่ออย่างใดอย่างหนึ่ง a.domain.com
หรือ b.domain.com
พวกเขาทั้งสองตั้งใจที่จะ a.domain.com
. นั่นคือปัญหาที่ฉันอธิบายไว้ในตอนแรก แต่ถ้าลอง https://a.domain.com
หรือ https://b.domain.com
ทั้งคู่แก้ไขไปยังเซิร์ฟเวอร์ที่ถูกต้อง: ก
ถึง 8444
และ ข
ถึง 8445
.
เนื่องจากสิ่งนี้น่าผิดหวังมาก ฉันจะพักเบรคและวิเคราะห์สิ่งนี้สักครู่
อัปเดต
หลังจากพักเบรกไปนาน ฉันลองปรับแต่งแบบสุ่มอื่นๆ เพื่อดูว่าเกิดอะไรขึ้น แต่ก็ไม่มีอะไรทำงานตามที่คาดไว้ ยกเว้นเมื่อใช้ HTTPS ฉันติดตั้ง Postman เพื่อดูว่ามีการส่งอะไรในคำขอ และพบว่าใน Postman ทั้ง HTTP และ HTTPS ใช้ Host อย่างถูกต้อง ดียิ่งขึ้น/แย่ลง: การตอบกลับจริงแสดงหน้าต้อนรับที่แตกต่างกันสำหรับ a.domain.com
และ b.domain.com
หมายความว่าการกำหนดค่าของฉันทำงานได้อย่างถูกต้อง เมื่อฉันใช้บุรุษไปรษณีย์
ฉันคิดว่าการทดสอบทั้งหมดนี้อาจเป็นแค่ปัญหาแคช แต่เบราว์เซอร์ทดสอบที่ฉันเลือก (Firefox dev ed) ถูกตั้งค่าไม่ให้แคชข้อมูล ฉันจะตรวจสอบการตอบกลับด้วย curl และเบราว์เซอร์อื่นๆ ของฉัน