Nginx: हजारों server_name


12

मैं कैसे हजारों एक्सटर्नल कॉन्फिग फाइलों को बनाने या एक बहुत लंबी server_name लाइन लिखने के बिना नग्नेक्स को हजारों विभिन्न सर्वर_नामों तक सीमित कर सकता हूं?

वास्तव में, मैं चाहूंगा कि Nginx केवल server1.com, server2.com, आदि के लिए एक रिवर्स-प्रॉक्सी हो ...

मेरे लिए सबसे अच्छा समाधान यह होगा कि एक एकल बाहरी विन्यास फाइल जिसमें मेरा प्रतिबंधित सर्वर_नाम हो: server1.com, server2.com, आदि ...

क्या यह संभव है ?


ठीक है, आपके उत्तर के लिए धन्यवाद, यह बिना reg के काम करता है। भाव। Kolbijack द्वारा बताई गई बस एक बड़ी server_name सूची। धन्यवाद।


यदि आप ऐसा करने में मदद करते हैं, तो आपको कोलबिजैक उत्तर को स्वीकार करना चाहिए।
वनिरोई

जवाबों:


19

आप सभी के द्वारा सर्वर_नाम निर्देश को एक फाइल में डाल सकते हैं और फिर इसे अपने सर्वर ब्लॉक से शामिल कर सकते हैं:

# example.com.conf
server {
  include /path/to/server_names;
  ...
}

# /path/to/server_names
server_name
  example.com
  domain.com
  foo.com
;

Server_names फ़ाइल को शीर्ष पर server_name की आवश्यकता होती है और; एक वैध निर्देश के तल पर।


यदि आप ऐसा करते हैं तो विलंबता / लुकअप देरी / रैम उपयोग से सावधान रहें। मैंने अपाचे में बड़ी सूचियों (लगभग 5,000 ServerAliasनिर्देशों और 16 मिलियन Deny fromनिर्देशों तक) के साथ कुछ परीक्षण किया है । 5,000 डोमेन एक औसत दर्जे का लेकिन छोटे विलंब का उत्पादन करते हैं। संख्या बढ़ाने पर, मैंने पाया कि देरी लगभग 50,000 में ध्यान देने योग्य होने लगी। Apache (और शायद nginx के साथ भी) के साथ, सूची RAM में आयोजित की जाती है जिसका मतलब है कि मैंने जो सबसे बड़ा सेट आज़माया है, मैं अपने उपलब्ध RAM में केवल एक बच्चे की प्रक्रिया शुरू कर सकता हूं।
लदादादा

1
@ लाडदादा LOL। मैंने अभी जाँच की है। Nginx server_nameनिर्देशन और प्रतिक्रिया में 100 000 डोमेन के लिए 30Mb RAM का उपयोग करता हैRequest rate: 36900.6 req/s (0.0 ms/req)
VBart

1
1 000 000 के लिए 60MB औरRequest rate: 34716.8 req/s (0.0 ms/req)
VBart

यह अपाचे की तुलना में काफी बेहतर है, कम से कम प्रीफ़ॉर्क एमपीएम के साथ। पता करने के लिए आसान।
लदादादा

7

server_nameअपने में घोषणा server {}ब्लॉक एक नियमित अभिव्यक्ति हो सकता है, यह आप एक सेट पैटर्न के भीतर server_name रों मैच के लिए अनुमति चाहिए।

इस पर अधिक जानकारी यहाँ देखी जा सकती है: http://nginx.org/en/docs/http/server_names.html#regex_names


धन्यवाद, लेकिन मैं एक नियमित अभिव्यक्ति में अपने कस्टम डोमेन सूची की घोषणा नहीं कर सकता। server_name [zeus.domain.com | poseidon.domain.com | etc ...] | यह बहुत लंबा होगा।
फ्रेड

1
@ यदि आप एक उदाहरण डेटा सेट दे सकते हैं? जब तक कोई एक डोमेन दूसरे की तरह न हो, मुझे पूरा विश्वास है कि रेगेक्स पैटर्न आपको समस्या का समाधान करेगा।
वनरोई

@Oneiroi: उदाहरण उपयोग मामला = उपयोगकर्ता उप-डोमेन उत्पन्न करता है। एक सॉफ्टवेयर-ए-ए-सर्विस उत्पाद की कल्पना करें जहां प्रत्येक उपयोगकर्ता को अपना उपडोमेन मिले, और आप उन्हें अलग-अलग सर्वरों के लिए रूट करने के लिए नग्नेक्स का उपयोग करना चाहते हैं। उस स्थिति में, कोई भी डोमेन दूसरे की तरह नहीं है।
m.stenta

@ m.stenta आह, निष्पक्ष बिंदु। जब तक उप-क्षेत्रों में कुछ समानता नहीं है, तब तक हाँ रेगेक्स काम करने वाला नहीं है। या आप डोमेन से प्राप्त रेगेक्स के निर्माण में टाई करने जा रहे हैं जो कि इस उद्देश्य को पूरा करता है।
वनिरोई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.