14 अक्षर nginx server_name निर्देश के लिए अधिकतम लंबाई क्यों है?


13

मेरे पास निम्न वर्चुअल होस्ट है

server
{
  server_name abc.example.com;
  root /var/www/test/;
  index index.html;
}

दौड़ते समय nginx -s reloadमुझे निम्नलिखित त्रुटि मिलती है:

nginx: [emerg] server_names_hash का निर्माण नहीं कर सका, आपको server_names_hash_bucket_size: 32 बढ़ाना चाहिए

समान किसी भी सर्वर_नाम के लिए होता है जिसमें 15 या अधिक वर्ण होते हैं।

यदि मैं server_name को ab.example.com(या किसी भी नाम से 15 वर्णों के लिए) सेट करता हूं , तो समस्या प्रकट होना बंद हो जाती है।

इसे ठीक करने के लिए मैंने निम्नलिखित को जोड़ा /etc/nginx/nginx.conf(यह पहले परिभाषित नहीं किया गया था):

server_names_hash_bucket_size 64;

इसे 33 पर सेट करने का काम किया, लेकिन 32 को नहीं।

Server_name के लिए डिफ़ॉल्ट अधिकतम लंबाई 14 वर्ण क्यों है?

क्या यह सीमा nginx की डिफ़ॉल्ट सेटिंग्स या उस पर चलने वाली प्रणाली द्वारा लगाई गई है?

15 का एक server_name अधिकतम हैश बाल्टी आकार को कैसे प्रभावित करता है? (सिस्टम पर केवल 4 वर्चुअल होस्ट परिभाषित हैं)


की सामग्री क्या है grep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size?
जेवियर ल्यूकास

@XavierLucas:/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size:64 /sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size:64 /sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size:64
Virgiliu

जवाबों:


11

यह त्रुटि तब होती है जब server_nameहै हैश बाल्टी में फिट करने के लिए बहुत बड़ी

server_names_hash_bucket_sizeसर्वर के CPU कैश लाइन आकार के आधार पर डिफ़ॉल्ट को चुना जाता है। विशेष रूप से यह सीपीयू कैश मिस को कम करने के लिए जितना संभव हो उतना छोटा server_nameहोना चाहिए , क्योंकि हर अनुरोध पर ध्यान दिया जाना चाहिए।

इस कारण से कि आप अपेक्षित 31 के बजाय 14 वर्णों तक सीमित हैं, मुझे दो में से एक संभावना पर संदेह है:

  • आपकी कॉन्फ़िगरेशन फ़ाइल UTF-8 के बजाय UTF-16 एन्कोडिंग (या कुछ अन्य एन्कोडिंग) में है, जो नल को कच्चे डेटा में प्रत्येक वर्ण के पहले या बाद में दिखाई देती है और इसके आकार को दोगुना करती है। यदि आप Windows पर फ़ाइल को संपादित करते हैं तो ऐसा हो सकता है। यदि यह मामला है, तो iconvइसे ठीक करने के लिए कुछ का उपयोग करें ।
  • आप नेगनेक्स में एक अज्ञात बग में चले गए हैं।

विम का कहना है कि fileencoding = utf-8। मैंने यह सुनिश्चित करने के लिए कि यह UTF8 है एन्कोडिंग का उपयोग करते हुए iconv का उपयोग करके रूपांतरण किया, लेकिन नगीन व्यवहार में कुछ भी नहीं बदला। हो सकता है कि मेरे वीपीएस में एक सीपीयू बहुत छोटी कैश लाइन आकार के साथ है, क्या कोई तरीका है जो मैं इसकी जांच करता हूं और इसके लिए एक उचित मूल्य क्या होगा?
वीरगिलु

वाजिब मूल्य दो की सबसे छोटी शक्ति है कि nginx के साथ सफलतापूर्वक शुरू हो जाएगा। यदि आपके पास एक VPS यह सिर्फ कुछ के बारे में क्या कर रही हो सकता है ...
माइकल हैम्पटन

6

डिफ़ॉल्ट लंबाई स्वचालित रूप से प्रारंभ के दौरान निर्धारित की जानी चाहिए, उपयोग किए गए सर्वर नामों पर निर्भर करती है, लेकिन इसे एक reloadऑपरेशन के दौरान भी अपडेट किया जाना चाहिए । देखें कि क्या यह बकेट आकार को मैन्युअल रूप से सेट किए बिना काम करता है, लेकिन फिर से लोड के बजाय रीस्टार्ट के साथ।

सर्वर के नाम के लिए उपयोग की जाने वाली हैश के बारे में पढ़ने के लिए http://nginx.org/en/docs/hash.html देखें कि कैसे हैश आकार निर्धारित किए जाते हैं और http://nginx.org/en/docs/http/server_names.html

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