2013-10-24 15 views
9

के साथ एक स्थान शीर्षलेख संशोधित करना मेरे पास /api पर बैकएंड आरईएसटी सेवा के माध्यम से प्रत्येक अनुरोध को पास करने के लिए nginx proxy_pass सेटअप है। कुछ मामलों में यह सेवा Location शीर्षलेख लौटाती है जो अनुरोध के प्रकार के अनुसार बदलती है, उदाहरण के लिए, Location: http://foo.bar/baz/api/search/1234567 - baz भाग टोमकैट पर होस्ट होने के कारण है।nginx proxy_pass

मेरी वर्तमान कॉन्फ़िगरेशन foo.bar होस्ट नाम सही ढंग से फिर से लिखता है, लेकिन baz भाग को बरकरार रखता है। मैं इसे पट्टी करना चाहता हूं, लेकिन proxy_pass विकल्प हेडर के लिए एक नया मान साफ़ करने या सेट करने के लिए सीमित प्रतीत होते हैं।

उदाहरण के लिए, रेगेक्स विकल्प का उपयोग कर क्लाइंट को पारित होने से पहले गतिशील रूप से हेडर को संशोधित करने का कोई तरीका है? यह मेरा nginx विन्यास है:

location /api { 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

    proxy_max_temp_file_size 0; 
    client_max_body_size 10m; 
    client_body_buffer_size 128k; 
    proxy_connect_timeout 90; 
    proxy_send_timeout  90; 
    proxy_read_timeout  90; 
    proxy_buffers   32 4k; 
    proxy_redirect off; 

    proxy_pass http://foo.bar:8080/baz/api; 
} 

उत्तर

11

आप एक बेहतर तरीका एक प्रॉक्सी रीडायरेक्ट का उपयोग करने के लिए है यह संशोधित करने के लिए regexp उपयोग करने में सक्षम हो सकता है लेकिन:

proxy_redirect http://foo.bar/baz/ /; 

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

के लिए कोई स्थान शीर्षलेख foo.bar/baz//

पर जाना होगा यदि आप /baz/api को रीडायरेक्ट करना चाहते हैं, तो यह भी काम करेगा।

यदि कोई रीडायरेक्ट पोर्ट भी जोड़ रहा है, तो आपको http://foo.bar:8080/baz/ भी जोड़ना होगा (अलग रीडायरेक्ट)।

आशा है कि इससे मदद मिलती है!

+1

आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन मुझे रीडायरेक्ट करने में बहुत दिलचस्पी नहीं है (जो ठीक काम कर रहा है), लेकिन 'स्थान' शीर्षलेख को संशोधित करने में जो सर्वर प्रतिक्रिया के रूप में लौटाया गया है। एपीआई एक 'स्थान' शीर्षलेख देता है जिसमें यूआरएल होता है जहां क्लाइंट को पिछली क्वेरी के परिणाम प्राप्त होते हैं। यह अब एक दोषपूर्ण स्थान की ओर इशारा कर रहा है क्योंकि सर्वर को यह नहीं पता कि यह प्रॉक्सी हो रहा है। – user2010963

+1

proxy_redirect स्थान शीर्षलेख को संशोधित करता है ... इसका उद्देश्य है। Nginx दस्तावेज़ों पर एक नज़र डालें (http://wiki.nginx.org/HttpProxyModule#proxy_redirect) :) –

+1

ओह, मैं देखता हूं! उसने वास्तव में ऐसा किया था। धन्यवाद! (हालांकि मुझे लगता है कि 'रीडायरेक्ट' वास्तव में क्या करता है इसके लिए सबसे अच्छा नाम नहीं है) – user2010963

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