2013-03-17 7 views
9

मैं यह सुनिश्चित करने के लिए वेब पर कई लोगों को ProxyPreserveHost On का उपयोग करने के लिए संदर्भित करता हूं ताकि एक प्रॉक्सी बैकएंड मूल कॉलर का होस्ट नाम प्राप्त कर सके। मैं इसका उपयोग अपने वेब एप्लिकेशन की सुरक्षा (जावा, टोमकैट) को कसने के लिए कर रहा हूं, जबकि यह भी अच्छा होगा अगर मेरे लॉग दिखाएंगे कि उपयोगकर्ता वास्तव में कहां हैं। मेरे बिलाव लॉग अब दिखाने के इस – बहुत बेकार:प्रॉक्सीप्रेशर्वहोस्ट मेरे लिए बहुत कम प्रतीत होता है

127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54 

यह मेरा विन्यास है कि स्पष्ट रूप से अपेक्षा के अनुरूप काम नहीं करता है:

"/ etc/apache2/साइटों सक्षम/000-डिफ़ॉल्ट"

<VirtualHost *:80> 
ProxyPreserveHost On 
ProxyPass /webapp http://localhost:8080/webapp 
ProxyPassReverse /webapp http://localhost:8080/webapp 
RewriteEngine On 
RewriteRule ^/$   /webapp/frontend/app/ [proxy] 
RewriteRule ^/webapp/$  /webapp/frontend/app/ [redirect] 
RewriteRule ^/webapp/app/$ /webapp/frontend/app/ [redirect] 

सक्षम मॉड्यूल (यहां डिफ़ॉल्ट सामान कि 000-default में था पर से):

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod rewrite 

यह उबंटू 12.10 अपाचे HTTPD 2.2.22 चल रहा है।

आपकी सहायता की बहुत सराहना की जाएगी।

उत्तर

10

मुझे लगता है कि आपकी चिंता यह है कि आपके एक्सेस लॉग में अभी भी क्लाइंट फ़ील्ड में 127.0.0.1 है। यह ProxyPreserveHost से प्रभावित नहीं है; यह नेटवर्क अंत बिंदु का आईपी पता है जो अपाचे से जुड़ा हुआ है। किसी अन्य सर्वर से प्रॉक्सी कनेक्शन के लिए, यह हमेशा स्थानीयहोस्ट होने जा रहा है।

इसके अलावा, ProxyPreserveHost क्लाइंट द्वारा भेजे गए Host हेडर को संरक्षित करने के बारे में है, क्लाइंट के मूल आईपी को संरक्षित करने के बारे में नहीं। दूसरे शब्दों में, यह आपके उद्देश्यों के लिए गलत दिशा में जाने वाली जानकारी के बारे में है; यह क्लाइंट द्वारा भेजे गए सर्वर के रूप में आपके सर्वर के नाम को संरक्षित कर रहा है, क्लाइंट के आईपी नहीं।

मुझे लगता है कि आपका प्रश्न this question जैसा ही है। मैं अतिरिक्त नोट जोड़ दूंगा कि आप अपनेकॉन्फ़िगरेशन में %{X-Forwarded-For}i का उपयोग करके अपने लॉग में X-Forwarded-For शीर्षलेख लॉग कर सकते हैं।

+0

धन्यवाद। आपके द्वारा संदर्भित प्रश्न में मतदान के लिए वोट दिया गया है जो स्टैक ओवरफ़्लो के बाहर किसी आलेख से लिंक करता है जो वास्तव में 'प्रॉक्सीपेर्सर्वहोस्ट' को एक समाधान के रूप में संदर्भित करता है "इसलिए डेवलपर को 'एक्स-फॉरवर्डेड-फॉर हेडर' का उपयोग करके समाप्त नहीं करना पड़ता है" । मैं ऐसे डेवलपर हूं, और मुझे कुछ गैर-मानक का उपयोग करने में बुरा लगा। ने कहा कि, मैंने 'एक्स-फॉरवर्डेड फॉर' को गुगल किया है और यहां तक ​​कि विकिपीडिया इसे _de facto_ मानक के रूप में संदर्भित करता है, जो मैंने शुरू में सोचा था उससे कहीं बेहतर है (कुछ अपाचे HTTPD विशिष्ट है जो मेरा वेब एप्लिकेशन अपाचे HTTPD-specific बनाता है) । –

+0

मुझे लगता है कि लिंक किया गया ब्लॉग पोस्ट सिर्फ भ्रमित रूप से लिखा गया है। वह कहता है कि निर्देश "दूरस्थ रिमोट होस्ट रिमोट आईपी" को संरक्षित रखने के लिए इस्तेमाल किया जा सकता है। सामान्य परिस्थितियों में, वे एक ही चीज़ के लिए दो अलग-अलग नाम (DNS के माध्यम से) होंगे, लेकिन मुझे लगता है कि "रिमोट होस्ट" द्वारा वह वास्तव में दूरस्थ क्लाइंट के होस्टनाम के बजाय "दूरस्थ क्लाइंट द्वारा भेजे गए होस्ट हेडर" का अर्थ है। लेकिन वास्तव में, जैसा लिखा है कि यह भ्रमित है। – rra

+0

मैं आगे बढ़ गया और 'WebAuthenticationDetails.getRemoteAddress()' पर अपने मौजूदा चेक के अलावा 'HttpServletRequest.getHeader (" X-Forwarded-For ") के वापसी मूल्य पर एक चेक लागू किया। मेरा आवेदन अब इस प्रकार 'एक्स-फॉरवर्ड-फॉर' जागरूक है। मैं शुरुआत में उम्मीद नहीं कर रहा था, लेकिन फिर भी काम कर रहा था। धन्यवाद। –

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