ProxyPass का उपयोग करने के तरीके को समझने में मेरी मदद करें


11

अद्यतन: मैंने नीचे दो उत्तरों के साथ खेलने के बाद एक संशोधित प्रश्न जोड़ा।

नमस्ते,

यदि आप इसे पढ़ रहे हैं तो आप शायद Apache के mod_proxy और इसके ProxyPass फ़ंक्शन से परिचित हैं। कई अन्य लोगों की तरह, मेरे पास एक ऐसा एप्लिकेशन होने का मुद्दा है जिसे मैं अपने आंतरिक नेटवर्क के बाहर से एक्सेस कर सकता हूं, लेकिन यह एप्लिकेशन स्वयं ही विभिन्न मशीनों पर अन्य आंतरिक ऐप एक्सेस करता है, और जब आप इस सेटअप के साथ रिमोट एक्सेस में आते हैं, तो चीजें जीत जाती हैं।

तो, मेरा सेटअप बहुत ही सरल है, मेरे पास है:

मशीन # 1 में रिमोट एक्सेस सक्षम है, मैं इसे एक होस्ट नाम के माध्यम से एक्सेस करता हूं और यह इस पर चलने वाले PHP एप्लिकेशन को बाहर निकालता है।

मशीन # 2 एक नया एप्लिकेशन है जो Django चल रहा है, यह एक पूरी तरह से अलग बैकेंड (यहां तक ​​कि सामान्य) का उपयोग करता है, इसे एक अलग मशीन पर होस्ट किया जाता है। हमारे इंट्रानेट में, हम इसे एक सरल नामनाम होस्टनाम के माध्यम से एक्सेस करते हैं जो मूल रूप से आंतरिक 192.168.0.101 आईपी से लिंक करता है।

मैंने इसे स्थापित करने के लिए ProxyPass के साथ खेलने की कोशिश की है, उदाहरण के लिए, एक पास / नया इसे नए एप्लिकेशन को भेजेगा:

ProxyPass / नया http://192.168.0.101/

इस तरह के काम करता है, इसे दूसरे ऐप के लिए अनुरोध मिलता है, लेकिन यह टूट जाता है क्योंकि मेरा Django ऐप / / / लॉगिन / पर रीडायरेक्ट करना चाहता है, जिसे वह तुरंत नहीं पहचानता है। यदि मैं खुद को foo.net/new/auth/login होने के लिए url को संशोधित करता हूं तो मुझे मेरा लॉगिन पृष्ठ मिलता है, लेकिन जैसा कि आप अनुमान लगा सकते हैं कि यह पूरे ब्राउज़िंग के दौरान सुविधाजनक नहीं है।

इसलिए मैं अपनी इच्छानुसार काम करने के लिए प्रॉक्सी कैसे प्राप्त कर सकता हूं? क्या मुझे अपाचे के साथ कुछ करने की ज़रूरत है इसलिए यह हमेशा दूसरे ऐप में url के पहले / नया लिखता है, या यह कुछ ऐसा है जिसे मुझे अपने Django ऐप में संशोधित करना चाहिए?

किसी भी सुझाव और संकेत बहुत सराहना की जाएगी। आपके समय के लिए धन्यवाद

जवाबों:


11

आपको अपने django एप्लिकेशन को संशोधित करने की अपेक्षा / नए / ऑर्टिकल / लॉगिन के बजाय / ऑर्टिक / लॉगिन करने की अपेक्षा करनी चाहिए। आम तौर पर आपके प्रॉक्सी पास ऐसे दिखते हैं:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

अपने Django ऐप के साथ संयुक्त होने की उम्मीद है / नया / अपने मुद्दों को ठीक करना चाहिए।


2

VirtualHost का उपयोग करें। उदाहरण के लिए, अपने सर्वर का A नाम सेट करें (जैसे sub.external.com ) अपने सर्वर IP (उदाहरण के लिए 123.456.678 )

सुरक्षा के कारण, यदि आप सेटिंग्स # में प्रॉक्सीपेस का उपयोग करके स्पष्ट रूप से HTTP_HOST को अग्रेषित करना चाहते हैं , तो प्रति टिकट # 6880 :

USE_X_FORWARDED_HOST = True

इसके बाद Apache /etc/httpd/httpd.conf पर निम्न जोड़ें :

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

अपने VirtualHost को /etc/httpd/extra/httpd-vhosts.conf में जोड़ें :

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

अब, आप "पथ" के बारे में चिंता किए बिना http://sub.external.com से अपनी साइट तक पहुँचने में सक्षम होंगे


1

आपकी प्रतिक्रियाओं के लिए धन्यवाद, मैं अपने प्रश्न का उत्तर दे रहा हूं क्योंकि इसके साथ खेलने के बाद कुछ संशोधनों की आवश्यकता है।

सबसे पहले, अनुप्रयोग # 2 रन दूर http://192.168.0.101 .. इसे बंद नहीं चलता है http://192.168.0.101/path ताकि ProxyPass काफी अभ्यस्त काम

इसलिए irc से कुछ #apache लोगों के साथ बात करने के बाद, मैंने पाया कि मुझे ऐसा कुछ करने की आवश्यकता है:

ReriteCond% {HTTP_HOST} ^ app2.myremotedns.com *

रिवर्रिएट। * Http://192.168.0.101/ [पी]

यह क्या करता है किसी भी अनुरोध के लिए फिर से लिखना नियम app2.myremotedns.com पर प्रॉक्सी के माध्यम से आंतरिक आईपी को भेजा जाना है।

यह कुछ हद तक काम करता है लेकिन इसके तीन मुद्दे हैं:

  • सभी पेजों पर लॉगिन आवश्यक होने के साथ, अगर मैं ऐप्प 2 पर किसी भी चीज को दूरस्थ रूप से एक्सेस करता हूं, तो यह / ऑरिजनल / लॉगइन पर रीडायरेक्ट हो जाता है। हालांकि, वर्तमान रीव्रीट सेटअप के कारण, फ़ायरफ़ॉक्स से पहले मुझे एक रीडायरेक्ट लूप मिलता है, जो कि रास्ते में ही रुक जाता है। मुझे लगता है कि यह Django के पुनर्निर्देशन के तरीकों के साथ कुछ करने के लिए हो सकता है, लेकिन मुझे यकीन नहीं है।

  • यदि मैं लॉगिन को अक्षम करता हूं, तो पृष्ठ काम के प्रकार, लेकिन पूरी तरह से नहीं। मुझे लगता है कि ऐप # 2 के इंडेक्स पेज को लाने में सक्षम है, लेकिन वास्तव में और कुछ नहीं

  • स्टेटिक मीडिया सब टूट गया है, लेकिन यह शायद एक साधारण फिक्स है .. अभी इसके बारे में चिंतित नहीं हैं।

तो, मेरे पास एक और अधिक जटिल मुद्दा है तो मैंने कल्पना की ... :)


डिफ़ॉल्ट से भिन्न किसी भी django कॉन्फ़िगरेशन का उपयोग करने से बहुत परेशानी होती है। हाल ही में थोड़े ने मेरे ब्लॉग पर django और ProxyPass के साथ एक और मुद्दा हल किया: fromzerotocodehero.blogspot.com/2011/01/…

1
क्या आपको इस पर कोई समाधान मिला? मेरे पास वास्तव में समान मुद्दे हैं, विशेष रूप से मीडिया शैलियों आदि को खोने के साथ
सदस्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.