मुझे चिपचिपा सत्रों के बारे में अपाचे mod_proxy_balancer के साथ कुछ समस्याएं आ रही हैं।अपाचे + टॉमकैट - चिपचिपा सत्रों और लोड संतुलन के साथ समस्याएं
हमने जावा में एक आरामदायक webservice विकसित किया है, जो टोमकैट पर चल रहा है। वास्तविक बैकएंड Auth Basic प्रमाणीकरण के साथ, Acegi सुरक्षा का उपयोग कर रहा है।
वास्तुकला है (खेद मैं एक नया उपयोगकर्ता, मैं छवियों पोस्ट नहीं कर सकते कर रहा हूँ):
--------------------
|Java Reverse Proxy|
--------------------
|
--------------------
|Apache load balancer|
--------------------
|
--------|--------
| |
-------- --------
|tomcat1| |tomcat2|
-------- --------
हम इस "जावा रिवर्स प्रॉक्सी" विभिन्न व्यावसायिक चीजों को करने के लिए किया है। यह टोमकैट (टॉमकैट 1, टॉमकैट 2) पर बेसिक ऑथ प्रमाणीकरण भी करता है। http:?
अंतिम-उपयोगकर्ता की तरह यूआरएल कॉल /// a/b उपयोगकर्ता नाम = foo & पासवर्ड = बार & सत्र = xxx
रिवर्स प्रॉक्सी तो, अपाचे के लिए अनुरोध प्रॉक्सी साख साथ भेजने बेसिक ऑथ टोकन के रूप में।
http://<java reverse proxy domain>/service1
http://<java reverse proxy domain>/service2
http://<java reverse proxy domain>/service3
केवल Service1 और Service2 Acegi के माध्यम से संरक्षित कर रहे हैं:
अंतिम-उपयोगकर्ता तीन अलग अलग यूआरएल है। सेवा 3 गुमनाम रूप से सुलभ है (यह एक आवश्यकता है)।
हम अपाचे में निम्नलिखित विन्यास लोड संतुलन को करने के लिए है: Service1 करने के लिए पहली कॉल पर
<Proxy balancer://cluster>
Header set Cache-Control no-cache
Header set Pragma no-cache
BalancerMember http://xxx:9671 route=server1
BalancerMember http://xxx:9672 route=server2
</Proxy>
ProxyPreserveHost On
ProxyPass/balancer://cluster/ stickysession=JSESSIONID
ProxyPassReverse/balancer://cluster/ stickysession=JSESSIONID
, तो jsessionid उपयोगकर्ता के लिए दिया जाता है, और फिर वह भाग के रूप में इस सत्र जानकारी भेजता है अनुरोध (क्वेरी स्ट्रिंग, सत्र पैरामीटर में)
बैकएंड टॉमकैट्स (टोमकैट 1, टोमकैट 2) में सत्रों को बनाए रखने के लिए, जावा रिवर्स प्रॉक्सी क्वेरी स्ट्रिंग से सत्र प्राप्त करता है और इसे प्रॉक्सी टॉमकैट्स में भेजता है JSESSIONID कुकी।
सब कुछ यूआरएलएस के लिए पूरी तरह से ठीक काम करता है जो मूलभूत संरक्षित हैं। लेकिन फिर जब उपयोगकर्ता तीसरा यूआरएल (जो सार्वजनिक रूप से उपलब्ध है) को कॉल करता है, तो अपाचे लोड संतुलन को सही ढंग से निष्पादित नहीं करता है।
[Wed Feb 22 10:48:52 2012] [debug] mod_proxy_balancer.c(280): proxy: BALANCER: Found value "3FB8F8135173BBBE78E5E4BBD6F5C8FB" for stickysession JSESSIONID
[Wed Feb 22 10:48:52 2012] [debug] mod_proxy_balancer.c(1003): proxy: Entering byrequests for BALANCER (balancer://cluster)
[Wed Feb 22 10:48:52 2012] [debug] mod_proxy_balancer.c(1046): proxy: byrequests selected worker "http://xxx:9672" : busy 0 : lbstatus 1
कौन सा बिल्कुल ठीक है, के रूप में अनुरोध tomcat2 को लक्षित करने के लिए है:
उदाहरण के लिए, जब मैं सेवा 1 या 2 कहते हैं, मैं निम्नलिखित अपाचे लॉग मिलता है।
लेकिन तब जब मैं service3 कहते हैं, मैं:
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(280): proxy: BALANCER: Found value "3FB8F8135173BBBE78E5E4BBD6F5C8FB" for stickysession JSESSIONID
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(1003): proxy: Entering byrequests for BALANCER (balancer://cluster)
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(1046): proxy: byrequests selected worker "http://xxx:9671" : busy 0 : lbstatus 0
आप देख सकते हैं, भले ही jsessionid कुकी एक ही है, अपाचे गलत बिल्ला को अनुरोध भेजता है (यहाँ tomcat1)।
क्या यह तथ्य हो सकता है कि सेवा 3 के लिए यूआरएल को ऑथ बेसिक प्रमाणीकरण की आवश्यकता नहीं है, जहां सेवा 1 और सेवा 2 है?
मुझे पूरा यकीन है कि मैंने कुछ गलत किया है, लेकिन मैं लंबे समय से चारों ओर देख रहा हूं, और मैं इसे काम नहीं कर सकता।
आपकी सहायता बहुत सराहना की है।
धन्यवाद
यही सच है, उदाहरण मैं प्रदान की मैं jvmRoute भूल गया पर। लेकिन इसे server.xml में भी सेट करने से समस्या ठीक नहीं हुई। –
अपने सर्वर एक्सएमएल पोस्ट करने का प्रयास करें –