Score:0

Apache Proxypass เปลี่ยนเส้นทาง "localhost:port" เป็นสตริง url แทนบริการในเครื่องของพอร์ต

ธง cz

สิ่งแวดล้อม

เวอร์ชันเซิร์ฟเวอร์: Apache/2.4.6 (CentOS)


ฉันมีเซิร์ฟเวอร์สองเครื่องที่เกือบจะซ้ำกัน

aaa.com. และ bbb.com.

พวกเขามีชุดกฎของ Apache เกือบเหมือนกัน

aaa.com. การกำหนดค่า

<Location "/serviceEndpoint/">
  ProxyPass http://localhost:8100/serviceEndpoint/
  ProxyPassReverse http://localhost:8100/serviceEndpoint/
</Location>
<Location "/fruit/apple">
  ProxyPass "/fruit/apple" "http://localhost:8100/serviceEndpoint/fruit/apple"
  ProxyPassReverse "/fruit/apple" "http://localhost:8100/serviceEndpoint/fruit/apple"
</Location>

ดังนั้น /serviceEndpoint เป็นบริการที่ใช้พอร์ต 8100 และ /ผลไม้/แอปเปิ้ล เป็นเซิร์ฟเล็ตของมัน

bbb.com. การกำหนดค่า

<VirtualHost _default_:80>
  ProxyPass "/serviceEndpoint/" "http://localhost:20100/serviceEndpoint/"
  ProxyPassReverse "/serviceEndpoint/" "http://localhost:20100/serviceEndpoint/"

  ProxyPass "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"
  ProxyPassReverse "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"
</VirtualHost>

ดูเหมือนกัน แต่อยู่ใน VirtualHost:80 ถ้านั่นทำให้อะไรแตกต่างออกไป
(* แก้ไข ฉันทดสอบโดยใช้การกำหนดค่าเดียวกัน แต่ผลลัพธ์เหมือนกัน)

ปัญหา

ทั้งคู่ aaa.com/fruit/apple หรือ bbb.com/fruit/apple ทำได้ดี.

แต่เมื่อมีการใช้บริการ ตอบกลับ sendRedirect()(java) และเปลี่ยนเส้นทางเบราว์เซอร์ไปที่ /ผลไม้/แอปเปิ้ล,
เท่านั้น aaa.com. ทำงานและ bbb.com. พยายามเชื่อมต่อตัวอักษร http://localhost:20100/fruit/apple จากเบราว์เซอร์ไคลเอ็นต์

aaa.com ส่วนหัวการตอบสนองการเปลี่ยนเส้นทาง

HTTP/1.1 302
วันที่: จันทร์ 09 พฤษภาคม 2022 08:01:29 GMT
เซิร์ฟเวอร์: อาปาเช่
ตัวเลือก X-Frame: SAMEORIGIN
การรักษาความปลอดภัยอย่างเข้มงวดในการขนส่ง: max-age=63072000; รวมโดเมนย่อย
ตำแหน่ง: /fruit/#!/some_controller
ความยาวเนื้อหา: 0
ตั้งค่าคุกกี้: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Path=/serviceEndpoint; httpOnly
ตั้งค่าคุกกี้: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; ปลอดภัย; httpOnly; SameSite=เข้มงวด
X-XSS-การป้องกัน: 1; โหมด = บล็อก
Keep-Alive: หมดเวลา = 15, สูงสุด = 95
การเชื่อมต่อ: Keep-Alive

bbb.com ส่วนหัวการตอบสนองการเปลี่ยนเส้นทาง

HTTP/1.1 302
วันที่: จันทร์ 09 พฤษภาคม 2022 08:01:29 GMT
เซิร์ฟเวอร์: Apache-Coyote/1.1
ตัวเลือก X-Frame: SAMEORIGIN
การรักษาความปลอดภัยอย่างเข้มงวดในการขนส่ง: max-age=63072000; รวมโดเมนย่อย
ที่ตั้ง: http://localhost:20100/fruit/#!/some_controller
ความยาวเนื้อหา: 0
ตั้งค่าคุกกี้: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Path=/serviceEndpoint; httpOnly
ตั้งค่าคุกกี้: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; ปลอดภัย; httpOnly; SameSite=เข้มงวด
Keep-Alive: หมดเวลา = 15, สูงสุด = 95
การเชื่อมต่อ: Keep-Alive

คำถาม

จากการตั้งค่า Apache อะไรทำให้เกิดพฤติกรรมนี้และฉันควรแก้ไขอย่างไร

in flag
การเปลี่ยนเส้นทางไม่ได้มาจาก Apache กำหนดค่าบริการแบ็กเอนด์ของคุณด้วย URL ที่เหมาะสมเพื่อเปลี่ยนเส้นทางไป
Lunartist avatar
cz flag
@GeraldSchneider เส้นทางการเปลี่ยนเส้นทางคือ `/fruit/apple` และบริการทำงานได้ดีกับ `aaa.com.` อะไรเป็นสาเหตุของความคลาดเคลื่อนนี้
Lunartist avatar
cz flag
@GeraldSchneider `aaa.com` ทำงานบน Tomcat 8.5 และ `bbb.com` ทำงานบน Tomcat 8.0 จะส่งผลต่อการทำงานของ `response.sendRedirect() หรือไม่?
Score:0
ธง cz

มันเป็นความแตกต่างของ Tomcat Tomcat 8.0 เปลี่ยนเส้นทางไปที่ localhost ในขณะที่ 8.5 เปลี่ยนเส้นทางตามปกติ

Score:0
ธง us
Rob

ที่ คำสั่ง ProxyPassReverse กำหนดขอบเขตของเส้นทาง URL ที่ Apache ถูกต้องที่สุดในการตอบสนองส่วนหลัง เพื่อให้แน่ใจว่าผู้เข้าชมไซต์จะได้รับ URL ที่ถูกต้องซึ่งตรงกับคำขอของพวกเขาไปยัง Apache

ProxyPassReverse "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"

เดอะ bbb.example.com การตอบสนองเปลี่ยนเส้นทางไปที่

 ที่ตั้ง: http://localhost:20100/fruit/#!/some_controller
                                       \
                                        `- "แอปเปิ้ล" หายไป 

และด้วยเหตุนี้ ที่ตั้ง ส่วนหัวไม่ได้รับการแก้ไขโดยคำสั่ง ProxyPassReverse

ดูเหมือนว่าแอปพลิเคชันส่วนหลังไม่ได้สร้าง URL อ้างอิงตนเองที่ถูกต้อง และคุณต้องแก้ปัญหานั้นในแอปพลิเคชันส่วนหลัง หรือคุณตั้งสมมติฐานไม่ถูกต้องและการกำหนดค่า apache ของคุณควรเป็น:

ProxyPass "/ผลไม้/" "http://localhost:20100/serviceEndpoint/fruit/"
ProxyPassReverse "/fruit/" "http://localhost:20100/serviceEndpoint/fruit/"
Lunartist avatar
cz flag
`aaa.com.` เปลี่ยนเส้นทางปกติไปที่ `https://aaa.com/apple/#!/some_controller` อะไรสามารถสร้างความแตกต่างนี้ได้?

โพสต์คำตอบ

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