Nginx रिवर्स प्रॉक्सी द्वारा लौटे HTML पृष्ठों को संशोधित करें


17

मेरे पास इंटरनेट से इंट्रानेट के अंदर स्थित थर्ड पार्टी एप्लिकेशन तक पहुंचने के लिए रिवर्स प्रॉक्सी सेटअप है। मान लें कि यह एप्लिकेशन URL पर है:

https://internalserver:8080/ (केवल इंट्रानेट से उपलब्ध)

और प्रॉक्सी चालू है:

https://proxyserver/ (दुनिया में किसी भी जगह से उपलब्ध)

प्रॉक्सी nginx द्वारा प्रबंधित है और ठीक काम कर रहा है। जब उपयोगकर्ता पहुँचता है तो https://proxyserver/ उन्हें ऐप की सामग्री मिलती है https://internalserver:8080/

समस्या यह है कि एप्लिकेशन HTML प्रतिक्रिया में निरपेक्ष URL लिख रहा है, इसलिए जब उपयोगकर्ता एक नए पृष्ठ के लिए एक लिंक पर क्लिक करता है तो ब्राउज़र इसके आंतरिक नाम के साथ पृष्ठ का पता लगाने की कोशिश कर रहा है, जैसे कि https://internalserver:8080/somepage इसके बजाय https://proxyserver/somepage

मुझे पता है कि यह एक प्रोग्राम बग है, लेकिन मैं कार्यक्रम को संशोधित करने में सक्षम नहीं हूं।

क्या मैं प्रतिक्रिया को बाधित कर सकता हूं, URLs को संशोधित कर सकता हूं और इसे (संशोधित) अंतिम ग्राहक को nginx के साथ भेज सकता हूं? या शायद एक और उपकरण के साथ?

संपादित करें: मैंने इस प्रश्न को पहले देखा था , लेकिन मेरा मामला अधिक विशिष्ट है, उद्धृत प्रश्न एक सामान्य संशोधन के लिए पूछते हैं। उस स्थिति में फास्ट-सीजी तदर्थ कार्यक्रम सबसे अच्छा समाधान है, जो मैं चाहता हूं वह एक अधिक सामान्य परिदृश्य के लिए अधिक विशिष्ट समाधान है (मुझे लगता है)। हालांकि एक फास्ट-सीजीआई प्रोग्राम I´m को एक आसान और शायद मजबूत और वास्तविक दुनिया में साबित करने के लिए काम कर सकता है, इस परिदृश्य के लिए समाधान।


जवाबों:


16

यहाँ YouTube पर एक आधिकारिक Nginx वीडियो है जो इनलाइन कंटेंट रिवाइटरिंग को प्रदर्शित करता है।

https://youtu.be/7Y7ORypoHhE?t=20m22s

वास्तव में sub_filter के साथ

http://nginx.org/en/docs/http/ngx_http_sub_module.html

आपके मामले में, आप कुछ इस तरह देख रहे हैं:

location / {
sub_filter_once off;
sub_filter_types text/html;
sub_filter "https://internalserver:8080" "https://proxyserver";
}

3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

Ngx_http_sub_module मॉड्यूल एक फ़िल्टर है जो एक निर्दिष्ट स्ट्रिंग को दूसरे द्वारा प्रतिस्थापित करके प्रतिक्रिया को संशोधित करता है।

यह मॉड्यूल डिफ़ॉल्ट रूप से नहीं बनाया गया है, इसे --with-http_sub_module कॉन्फ़िगरेशन पैरामीटर के साथ सक्षम किया जाना चाहिए।

उदाहरण विन्यास

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.