2012-03-21 8 views
5

मेरे पास HTTPS कनेक्शन को संभालने के लिए कॉन्फ़िगर किया गया एक httpd सर्वर है और कनेक्शन को टॉमकैट (http या AJSP के माध्यम से) पर भेज दिया जाता है जहां अनुरोध संसाधित होते हैं। टॉमकैट सर्वर में मेरी आवश्यकताओं में से एक है प्रत्येक अनुरोध के रिमोट पोर्ट नंबर को लॉग करना। अगर मैंने सीधे टोमकैट मारा, तो रिमोट पोर्ट नंबर को पुनः प्राप्त करना सीधे आगे है और हम वर्तमान में इसे getRemotePort() फ़ंक्शन (HttpServletRequest) का उपयोग कर कर रहे हैं।HTTPD पर क्लाइंट स्रोत पोर्ट को पुनर्प्राप्त करना -> टॉमकैट सेटिंग

हालांकि, चूंकि मैं एक रिवर्स प्रॉक्सी (HTTP/AJP के माध्यम से HTTPS अनुरोधों को अग्रेषित करना) कर रहा हूं, इसलिए एक नया कनेक्शन बनाया जाएगा और मुझे कनेक्शन के लिए हमेशा रिमोट पोर्ट (और उस मामले के लिए दूरस्थ आईपी) मिल जाएगा मेरा httpd सर्वर टोमकैट (जब मैं AJP का उपयोग करता हूं को छोड़कर। इस मामले में दूरस्थ सर्वर आईपी जानकारी सही ढंग से आती है)।

ProxyPreserveHost On 
ProxyPass/ajp://localhost:8009/ 

या

ProxyPreserveHost On 
ProxyPass/http://localhost:8081/ 

मैं भी RewriteRules साथ एक छोटा सा खेला, लेकिन चीजें काम नहीं कर सके:

मैं की तरह httpd पर अलग अलग विन्यास, कोशिश की है।

httpd दस्तावेज़ पढ़ना, mod_proxy X-Forwarded-Host, X-Forwarded-For, आदि जैसी चीज़ों के लिए अनुरोध शीर्षलेख जानकारी प्रदान करता है लेकिन स्रोत पोर्ट के बारे में कोई जानकारी नहीं है।

मेरे पास even found a bug है, जहां स्पष्ट रूप से X-Forwarded-Port विशेषता प्रॉक्सी अनुरोध शीर्षलेख में जोड़ा गया था, लेकिन यह कोड मुख्य पंक्ति/शाखा में नहीं प्रतीत होता है।

तो संक्षेप में, मैं क्लाइंट के स्रोत पोर्ट को पुनर्प्राप्त कैसे कर सकता हूं (रिवर्स प्रॉक्सी नहीं) जब HTTPD टॉमकैट को अनुरोध अग्रेषित कर रहा है?

+0

तो आपको रिमोट आईपी पता मिलता है लेकिन पोर्ट नहीं? साथ ही, आप tomcat/httpd के संस्करण संख्याओं को पार कर सकते हैं। आपके द्वारा प्राप्त httpd बग संस्करण 1.3 – bubbly

+0

हाय केविन के लिए था। मैं अपाचे httpd v 2.2.3 और टॉमकैट 5.5 – alp

+0

का उपयोग कर रहा हूं एक्स-फॉरवर्ड-काम के लिए? – bubbly

उत्तर

0

मेरा मानना ​​है कि आप इस mod_rewrite मॉड्यूल

का उपयोग कर एक RewriteRule में के रूप में दस्तावेज में कहा गया है क्या कर सकते हैं आप प्रतिस्थापन स्ट्रिंग में सर्वर चर निर्दिष्ट कर सकते हैं

In addition to plain text, the Substition string can include 

    back-references ($N) to the RewriteRule pattern 
    back-references (%N) to the last matched RewriteCond pattern 
    server-variables as in rule condition test-strings (%{VARNAME}) 

इन चरों में से एक REMOTE_PORT है । फिर आप अपने यूआरएल को फिर से लिख सकते हैं और इसे अपने टॉमकैट सर्वलेट कॉल के लिए यूआरएल पैरामीटर के रूप में पास कर सकते हैं उदा।

http://url.to.tomcat/mycontext?remoteport=${REMOTE_PORT}

3

आप एक अनुरोध हेडर mod_rewrite के साथ X-Forwarded-SourcePort बुलाया + mod_headers जोड़ सकते हैं

RewriteEngine on 
RewriteRule .* - [E=REMOTE_PORT:%{REMOTE_PORT},NE] 
RequestHeader set X-Forwarded-SourcePort %{REMOTE_PORT}e 

अपाचे बैकएंड सर्वर के लिए ग्राहक स्रोत पोर्ट के साथ अनुरोध आगे भेज देंगे ताकि, आप अपने आवेदन से एक्स-फॉरवर्ड-सोर्सपोर्ट अनुरोध हेडर प्राप्त कर सकते हैं।

+0

जोड़ा गया, यदि vhosts का उपयोग करते हैं, तो इन्हें प्रत्येक <वर्चुअलहोस्ट्स> सेक्शन में जोड़ा गया है, पर रीवाइटइंजिन रीवाइटऑप्शन इनहेरिट –

संबंधित मुद्दे