Nginx: सर्वर पर होस्ट हेडर को कैसे चुना जाए (लोड बैलेंसिंग)


10

मेरे पास एक साइट है जो लोड बैलेंसर के रूप में काम करती है। साइट ए।

मेरे पास अन्य साइटें हैं जिनमें केवल एक ही डोमेन हो सकता है। तो अगर मैं सिर्फ उन्हें पुनर्निर्देशित करता हूं तो यह कहता है कि होस्ट नाम नहीं मिला है।

इसलिए यदि मैं स्वयं हेडर को किसी चीज़ पर सेट करता हूँ तो केवल वह साइट दिखाई देती है।

मैं proxy_set_header Host xxxxचुने हुए सर्वर पते पर कैसे सेट कर सकता हूं । इस तरह से प्रत्येक रीरूटिंग अनुरोध में अलग और उपयुक्त होस्ट हेडर होंगे।

यह समस्या नहीं होगी यदि मेरी अन्य 2 साइटें यूआरएल के आधार पर काम कर सकती हैं और होस्ट हेडर नहीं।

worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
error_log  logs/error.log  debug;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream myapp1 {
        #server localhost:3333;
        server www.asd.com:80;
    }

    server {
        listen 80;

        location / {
            proxy_set_header Host            $upstream_addr;  // should become somehow www.asd.com right now this code doesn't work
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://myapp1;
        }
    }
}

$server_addrकिसी भी तरह 127.0.0.1 क्यों ??
मुहम्मद उमर

जब सर्वर www.asd.com:80चुना जाता है तो मैं होस्ट हेडर www.asd.com होना चाहता हूं
मुहम्मद उमर

या अगर लिखने का कोई तरीका है if(server1) than host = a; ,if(server2) than host = b;
मुहम्मद उमर

1
बात यह है कि उपयुक्त होस्ट हेडर मेरे विचार में होना चाहिए, जो भी आपको क्लाइंट से मिलता है। यदि क्लाइंट www.asd.com से अनुरोध करता है, तो होस्ट हैडर होना चाहिए। यह ज़रूरत पड़ने पर बैकएंड में पूर्ण रूप से उरोज उत्पन्न करने में मदद करेगा, कुकीज़ आदि के लिए उचित डोमेन सेट करें। आप जो भी करने की कोशिश कर रहे हैं, आप शायद इसे गलत तरीके से देख रहे हैं।
फ्लोरिन असावोई

क्लाइंट और मध्य सर्वर दोनों मेरे हैं।
मुहम्मद उमर

जवाबों:


6

आपको यहां आने वाले होस्ट वैरिएबल में हेडर सेट करने की जरूरत है, जैसा कि यहां पर लिखा गया है :

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or nameअर्थ जो भी क्लाइंट / ब्राउज़र बताता है, वह वही है जो चुना जाता है।
मुहम्मद उमर

यह वही है जो आप करना चाहते हैं, सही है? क्लाइंट आपके प्रॉक्सी से संसाधन / वर्चुअल होस्ट के लिए अनुरोध करता है, और आपको वर्चुअल होस्ट की सेवा करने की आवश्यकता होती है। जिस वर्चुअल होस्ट को परोसा जाना है, उसे क्लाइंट / बोरवर द्वारा चुना जाता है।
जेफ वोंग

कोई भी वर्चुअल होस्ट यादृच्छिक रूप से सर्वर द्वारा नहीं चुना जाता है
मुहम्मद उमर

1
कुछ इस तरह? समीपता के दो स्तर बनाएँ, और दूसरी परत serverfault.com/a/622782/287634
जेफ वोंग

बीमार एक नज़र रखना, लेकिन मुझे लगता है कि ive पहले से ही देखा हुआ है क्योंकि मैंने वहां कुछ सामान उखाड़ दिया है
मुहम्मद उमर

0

इस प्रश्न के उत्तर इस व्यवहार की व्याख्या करते हैं और वर्कअराउंड पेश करते हैं

मूल रूप से, अपस्ट्रीम के चयन से पहले हेडर को अच्छी तरह से तय किया जाता है। यदि आप किसी होस्ट को सभी अपस्ट्रीम का जवाब नहीं दे सकते हैं: हेडर, आपको उसी समय अपस्ट्रीम को ठीक करना होगा जब आप हेडर सेट करेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.