Nginx সার্ভার_নাম নির্দেশের জন্য 14 অক্ষর সর্বাধিক দৈর্ঘ্য কেন?


13

আমি নিম্নলিখিত ভার্চুয়াল হোস্ট আছে

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

দৌড়ানোর সময় nginx -s reloadআমি নিম্নলিখিত ত্রুটিটি পাই:

nginx: [emerg] সার্ভার_নাম_হ্যাশ তৈরি করতে পারেনি, আপনার সার্ভার_নামগুলি_হ্যাশ_বকেট_সাইজ: 32 বৃদ্ধি করা উচিত

15 বা ততোধিক অক্ষর থাকা কোনও সার্ভার_নামের ক্ষেত্রেও একই ঘটনা ঘটে।

যদি আমি সার্ভার_নামটি ab.example.com(অথবা 15 টি অক্ষরের নীচে কোনও নাম) সেট করে রাখি তবে সমস্যা প্রকাশ হওয়া বন্ধ হয়ে যায়।

এটির সমাধানের জন্য আমি নিম্নলিখিতগুলিতে যুক্ত করেছি /etc/nginx/nginx.conf(এটি আগে সংজ্ঞায়িত হয়নি):

server_names_hash_bucket_size 64;

এটিকে 33 এ সেট করা কাজ করেছে তবে 32 নয়।

সার্ভার_নামের জন্য কেন ডিফল্ট সর্বোচ্চ দৈর্ঘ্য 14 টি অক্ষর?

এই সীমাটি কি এনজিনেক্সের ডিফল্ট সেটিংস দ্বারা চাপানো হয়েছে বা যে সিস্টেমটি চলছে তার দ্বারা চালিত?

15 এর সার্ভার_নাম সর্বাধিক হ্যাশ বালতির আকারকে কীভাবে প্রভাবিত করে? (সিস্টেমে কেবল 4 টি ভার্চুয়াল হোস্ট সংজ্ঞায়িত করা হয়েছে)


বিষয়বস্তু কি grep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size?
জাভিয়ের লুকাস

@ জাভিয়ারলুকাশ:/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
ভার্জিলিউ

উত্তর:


11

এই ত্রুটিটি ঘটে যখন হ্যাশ বালতিতে ফিট করারserver_name জন্য খুব বড়

server_names_hash_bucket_sizeসার্ভারের সিপিইউ ক্যাশে লাইন আকারের উপর নির্ভর করে এর জন্য ডিফল্টটি বেছে নেওয়া হয়। বিশেষ করে এটা সম্ভব ছোট হতে বোঝানো হচ্ছে সিপিইউ ক্যাশে মিস কমাতে , যেমন server_nameগুলি প্রত্যেক অনুরোধে তাকিয়ে করা আবশ্যক।

আপনি কেন প্রত্যাশিত 31 এর পরিবর্তে 14 টি অক্ষরে সীমাবদ্ধ রয়েছেন, আমি দুটি সম্ভাবনার একটিতে সন্দেহ করি:

  • আপনার কনফিগারেশন ফাইলটি ইউটিএফ -8 এর পরিবর্তে ইউটিএফ -16 এনকোডিং (বা অন্য কোনও এনকোডিং) এ রয়েছে, যার ফলে কাঁচা ডেটাতে প্রতিটি অক্ষরের আগে বা পরে নালগুলি উপস্থিত হয় এবং এর আকার দ্বিগুণ হয়। আপনি যদি উইন্ডোজে ফাইলটি সম্পাদনা করেন তবে এটি ঘটতে পারে। যদি এটি হয় তবে iconvএটি ঠিক করার মতো কিছু ব্যবহার করুন ।
  • আপনি এনজিনেক্সে একটি অজানা বাগে চলে এসেছেন।

ভিম বলে যে ফাইলেনকোডিং = utf-8। এনকোডিংটি ইউটিএফ 8 তবে এনগিনেক্সের আচরণে কিছুই পরিবর্তন হয়নি তা নিশ্চিত করার জন্য আমি আইকনভি ব্যবহার করে একটি রূপান্তর করেছি। হতে পারে আমার ভিপিএসের একটি খুব ছোট ক্যাশে লাইন আকারের সিপিইউ রয়েছে, আমি এটি যাচাই করার কোনও উপায় নেই এবং এর জন্য যুক্তিসঙ্গত মানটি কী হবে?
ভার্জিলিউ

যুক্তিসঙ্গত মানটি দুটির মধ্যে ক্ষুদ্রতম শক্তি যা এনজিনেক্স সফলভাবে শুরু হবে। আপনার যদি ভিপিএস থাকে তবে এটি ঠিক কিছু করতে পারে ...
মাইকেল হ্যাম্পটন

6

শুরুর সময় ডিফল্ট দৈর্ঘ্যটি স্বয়ংক্রিয়ভাবে নির্ধারিত হওয়া উচিত, ব্যবহৃত সার্ভারের নামের উপর নির্ভর করে, তবে কোনও reloadঅপারেশনের সময় এটিও আপডেট করা উচিত । দেখুন ম্যানুয়ালি বালতির আকার নির্ধারণ না করে পুনরায় লোডের পরিবর্তে পুনরায় চালু করার সাথে এটি কাজ করে কিনা।

হ্যাশের আকারগুলি কীভাবে নির্ধারিত হয় তা শিখতে http://nginx.org/en/docs/hash.html দেখুন এবং সার্ভার নামের জন্য ব্যবহৃত হ্যাশগুলি পড়তে http://nginx.org/en/docs/http/server_names.html দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.