Apache Httpd Custom ErrorDocument 404 เมื่อ ProxyPass ส่งคืน 404


9

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

<VirtualHost *:80>
  ServerName servername
  DocumentRoot /somepath/
  ProxyPass / http://localhost:8080/someapp/
  ProxyPassReverse / http://localhost:8080/someapp/

  ErrorDocument 404 /error.html
</VirtualHost>

คำตอบ:


12

คุณสามารถหลีกเลี่ยงการใช้พร็อกซีสำหรับไดเรกทอรีเฉพาะโดยการระบุ!แทนเป้าหมายพร็อกซี เนื่องจากมันทำหน้าที่ในไดเรกทอรีให้ย้ายerror.htmlไปยังไดเรกทอรีย่อย (เราจะบอกว่าerrors) และ:

<VirtualHost *:80>
  ServerName servername
  DocumentRoot /somepath/
  ProxyPass /errors !
  ProxyPass / http://localhost:8080/someapp/
  ProxyPassReverse / http://localhost:8080/someapp/
  ProxyErrorOverride On
  ErrorDocument 404 /errors/error.html
</VirtualHost>

ขออภัยบางทีการกำหนดค่าขาดรายละเอียดบางอย่าง แต่สิ่งที่ฉันต้องการคือการจับข้อผิดพลาด 404 ที่ส่งคืนจากพร็อกซีพาสและแสดงข้อผิดพลาด.htmlแทน
hendry.fu

1
ขอบคุณฉันพบวิธีการแทนที่ฉันสามารถใช้คำสั่ง
ProxyErrorOverride

@satyavirya ดีมากฉันจะเพิ่มเข้าไปในคำตอบสำหรับผู้ค้นหาในอนาคต
เชนแมดเดน

ขอบคุณสำหรับคำแนะนำของ ProxyErrorOverride แต่ฉันพบว่ามีข้อผิดพลาดเมื่อใช้ Apache 2.4 ก่อน 2.4.11 ซึ่งควรได้รับการแก้ไขแล้ว: bz.apache.org/bugzilla/show_bug.cgi?id=53420 ... อาจเป็นเพียง วิธีแก้ปัญหาคือเพื่อลดการหมดเวลาของพร็อกซี่หรือไม่!
FibreFoX

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