วิธียกเว้น URL สำหรับ Apache Mod_proxy


23

เรามีเซิร์ฟเวอร์ Apache สองตัวเป็น front-end และ 4 tomcat เซิร์ฟเวอร์เป็น back-end ที่กำหนดค่าโดยใช้โมดูล mod_proxy เป็น load balancer ตอนนี้เราต้องการแยก urcat Tomcat หนึ่งตัวออกจากตัวปรับสมดุลโหลดโหลด mod_proxy มีวิธีหรือกฎที่จะยกเว้นหรือไม่

การตั้งค่า Proxy Balancer:

<Proxy balancer://backend-cluster1>
   BalancerMember http://10.0.0.1:8080 loadfactor=1 route=test1 retry=10
   BalancerMember http://10.0.0.2:8080 loadfactor=1 route=test2 retry=10
</Proxy>

คำตอบ:


38

คุณยกเว้นเส้นทางจาก mod_proxy ด้วยเครื่องหมายอัศเจรีย์ก่อนคำสั่ง ProxyPass เต็มของคุณซึ่งตัวอย่างของคุณจะหายไป (!) - ProxyPass /path balancer://backend-cluster1มันจะมีลักษณะดังนี้ ดังนั้นหากต้องการยกเว้นเส้นทางให้เพิ่ม:

ProxyPass /my/excluded/path !

ก่อน

ProxyPass /my balancer://backend-cluster1

แต่ URL จะมีการเข้าถึงด้านหลัง proxyBalancer
Mughil

ขอบคุณ fuzzyfelt ฉันขอวิธียกเว้น URL หากเรากำหนดค่าพร็อกซีบาลานเซอร์ ฉันได้รวมการกำหนดค่าพร็อกซีไว้ในคำถาม
Mughil

1
ดูคำตอบที่อัปเดต เพิ่มการยกเว้นก่อนที่คุณจะกำหนดเส้นทางที่จะผ่าน proxypass
Alastair McCormack

2
การใช้คำตอบนี้ทำได้ดีมากสำหรับการอนุญาตให้ LetsEncrypt เป็นตำแหน่งโฟลเดอร์ที่รู้จักกันดีเป็นค่าเริ่มต้นสำหรับ virtualhost เมื่อใช้ ProxyPass เพื่อแสดงเซิร์ฟเวอร์แชทที่นั่น เพิ่มก่อนคำสั่งอื่น ๆ : ProxyPass /.well-known!
ศาสตราจารย์ Falken

2

นอกเหนือจากคำตอบของ Alastair McCormack: หากคุณใช้<Location>คุณต้องใส่ข้อยกเว้นด้านล่างแทนก่อน:

<Location /my/>
    ProxyPass balancer://backend-cluster1
</Location>

<Location /my/excluded/path/>
    ProxyPass !
</Location>

-2

คุณสามารถเขียนทับคำสั่งพร็อกซีที่จะทำให้ผู้ใช้เกิดข้อผิดพลาด 404 เมื่อพวกเขาพยายามเข้าถึง URL ที่คุณต้องการยกเว้น คุณจะต้องเปิดใช้งาน rewrite_module

<Location ~ ^/urltoblock($|/)>
   RewriteEngine On 
   RewriteRule .* - [L,R=404]
</Location>

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