IPv6- এ nginx নাম-ভিত্তিক ভার্চুয়াল হোস্ট


44

আমার কাছে একটি এনগিনেক্স সার্ভার রয়েছে প্রায় অর্ধ ডজন বিভিন্ন ওয়েবসাইট পরিবেশন করে। এটি এমন একটি লিনোডে চলছে যা সদ্য আইপিভি 6 দেশীয় সমর্থন পেয়েছে (ডালাস ডেটা সেন্টার), এবং আমি ডুয়াল স্ট্যাক অপারেশনের জন্য আমার বেশিরভাগ সাইটগুলি কনফিগার করার চেষ্টা করছি। আমি প্রথমটি পেয়েছি এবং আইপিভি 6-কেবলমাত্র সাবডোমেন ব্যবহার করে চলছি:

server {
    listen [::]:80 ipv6only=on;
    listen 80;

    server_name example.com ipv6.example.com;

    root /var/www/example.com/htdocs;

    #More stuff, including PHP, WordPress
}

এটি দুর্দান্ত কাজ করে - উদাহরণ.কম আইপিভি 4-শুধুমাত্র (এখনকার জন্য), এবং ipv6.example.com আইপিভি 6-কেবল (প্রাথমিকভাবে পরীক্ষার উদ্দেশ্যে রয়েছে)। আমি পারি ping6 ipv6.example.com, এমনকি wget ipv6.example.comকোনও ঘাম না ভাঙিয়েও - এটি অনেকটা আনন্দদায়ক ব্যথা-মুক্ত ছিল ( ipv6only=onযুক্তি এবং দ্বৈত listenনির্দেশের প্রয়োজনীয়তার সাথে এনজিন্স ভার্চুয়াল হোস্টগুলিকে যেভাবে বেঁধে রেখেছে তার সাথে "গোটচা" খুঁজে পাওয়ার পরে )।

যাইহোক, আমি এখন আমার অন্যান্য ডোমেনগুলি সমর্থন করার জন্য এটি প্রসারিত করার চেষ্টা করছি, স্ট্যাটিক.এক্স্পেল.কম. দিয়ে শুরু করে; যখন আমি উপরের মত একই পন্থাটি গ্রহণ করি, যদিও ( যুক্তি listenসহ দ্বৈত নির্দেশাবলী ipv6only=on), এনজিনেক্স পুনরায় চালু করার সময় আমি নিম্নলিখিত ত্রুটিটি পাই:

* Starting Nginx Server...
nginx: [emerg] a duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com.conf:3

দেখে মনে হচ্ছে যে আইপিভি 6-র জন্য বাইন্ডিংয়ের Nginx- র পদ্ধতিটি নাম ভিত্তিক ভার্চুয়াল হোস্টের অনুমতি দেয় না? আমাকে কী আমার হোস্টের অতিরিক্ত আইপিভি 6 ঠিকানা পেতে হবে (সমস্যা নয়) এবং আইপিভি 6-তে আইপিভি 6-তে নামভিত্তিক ভার্চুয়াল হোস্টিং আইপিভি 4-র সাথে ব্যবহার করতে হবে? বা আমি কি এমন একটি সমাধান মিস করছি যা আমার কনফিগারেশনগুলিকে উভয় স্ট্যাকের সাথে সামঞ্জস্য রাখতে সক্ষম করবে?

আমি আশা করছিলাম যে আমার সাইটটি সম্পূর্ণরূপে আইপিভি 6 স্ট্যাকের সাথে বিশ্ব আইপিভি 6 দিবসের জন্য যথাসময়ে রয়েছে , তবে যতক্ষণ না আমি এটিকে দ্রুত সাফ না করতে পারি আমি প্রস্তুত থাকতে পারি না। কোনও ব্যবহারিক দৃষ্টিকোণ থেকে কোনও বড় বিষয় নয় - আমার কোনও সাইটই কোনও কল্পনা দ্বারা কোনও "প্রধান সংগঠন" হিসাবে যোগ্যতা অর্জন করে না - তবে আমার জিকের জমাটি সংরক্ষণ করতে আমাকে সহায়তা করুন!

যুক্ত করতে সম্পাদিত:

@ কলবিজ্যাকের উত্তরের জন্য ধন্যবাদ, আমার কাছে এখন সম্পূর্ণরূপে কার্যকরী দ্বৈত-স্ট্যাক ওয়েব সার্ভার রয়েছে। কেবল স্বচ্ছতার স্বার্থে, তিনি আমাকে যে সমাধান দিয়েছেন তা আমি সম্পাদনা করছি যাতে প্রত্যেকে উত্তর কী তা স্পষ্ট দেখতে পাবে।

আমার ডিফল্ট ক্যাচল ভোস্টের নিম্নলিখিত listenনির্দেশাবলী রয়েছে:

listen 80 default_server;
listen 8080 default_server;
listen [::]:80 default_server ipv6only=on;
listen [::]:8080 default_server ipv6only=on;

অর্ডারটি গুরুত্বপূর্ণ কিনা তা আমি জানি না, তবে এটি রয়েছে। তারপরে, প্রতিটি অতিরিক্ত ভোস্টের নিম্নলিখিত listenনির্দেশাবলী থাকে:

listen 80;
listen [::]:80;

(বা তার পরিবর্তে সেই বন্দরে যা শুনেছে তার জন্য 8080।) এখানে গুরুত্বপূর্ণ অংশটি ডিফল্ট ভোস্টের listenনির্দেশাবলী ব্যতীত সকলের জন্য অতিরিক্ত কোনও যুক্তির মোট অভাব বলে মনে হচ্ছে - অর্থাত্ কোনও পুনরাবৃত্তি নয় ipv6only=on

আবার, সমাধানের জন্য @ কলবিজ্যাককে অনেক ধন্যবাদ!


এনগিনেক্স ১.২.১ সহ আমার নির্দিষ্ট করতে হবে না ipv6only=on। অন্য সব কিছু অবশ্য একইরূপ থেকে রইল, এর জন্য ধন্যবাদ!
বীপডগ

উত্তর:


46

সকেটের জন্য আপনাকে কেবলমাত্র একটি ঘোষণার জন্য শোনার বিকল্পগুলি দরকার। সাধারণত আপনি এই ঘোষণায় তাদের রাখবেন যেটিতে ডিফল্ট_সার্ভার পতাকাও অন্তর্ভুক্ত রয়েছে তবে কিছু বিকল্পের জন্য আমি মনে করি আপনি কেবল তাদের যে কোনও একটি শোনার নির্দেশের উপর সেগুলি সেট করতে পারেন। কেবলমাত্র এক বাদে সমস্ত শ্রোতা থেকে ipv6only = on অপসারণ করুন।


2
অপেক্ষা করুন, আমি বিভ্রান্ত আমি ভেবেছিলাম সার্ভারের ঘোষণাপত্রে কমপক্ষে একটি শোনার নির্দেশ প্রয়োজন ছিল - নইংএক্স কীভাবে জানবে যে কোন সার্ভার ব্লকটি কোন পোর্ট (গুলি) এ প্রতিক্রিয়া জানাতে চাইছে? আমি এটি উপরে উল্লেখ করিনি কারণ আমি এটি প্রাসঙ্গিক বলে মনে করি নি, তবে আমার ৮০৮০ এর একটি সার্ভার রয়েছে, বাকিটি ৮০-তে রয়েছে এবং আমি এই দম্পতিটির সাথে সাথেই একটি দম্পতির জন্য ৪৪৩ অফার করার ইচ্ছা নিয়েছি এবং তারপরে নিজেকে একটি SSL শংসাপত্র পান।
ক্রোমি

ঠিক আছে, ডকুমেন্টেশনের দিকে আবার তাকানোর পরে, 80 টি পোর্টে থাকা সাইটগুলি দেখে মনে হচ্ছে তাদের আসলে কোনও শোনার নির্দেশের প্রয়োজন হবে না, কেবল আমার ক্যাচল ভোস্টের ডিফল্ট_সেভার পতাকা সহ একটি one যাইহোক, এটি এখনও আমার সার্ভারের জন্য ৮০৮০ সালে ব্যর্থ হচ্ছে, যার জন্য আমি একটি ডিফল্ট ক্যাচলও ব্যবহার করি (হোস্ট নামের জন্য কোনও অনুরোধ আমি স্পষ্টভাবে অন্য কোনও vhost এ কনফিগার না করে রেখেছি তা উপেক্ষা করার জন্য ক্যাচল লেখা হয়েছে)।
ক্রোমি

1
আমি আপনার সমস্ত শোনার নির্দেশাবলী সরিয়ে দিতে বলছি না। তাদের মধ্যে একটি ব্যতীত কেবল ipv6only = পতাকা থেকে সরান। প্রতিটি সার্ভারে শোনার নির্দেশনা ব্যতীত, তারা কেবল 80 টি শোনার জন্য ডিফল্ট হবে; ipv6 অন্তর্ভুক্ত থাকতে পারে বা নাও থাকতে পারে। আমি মনে করি সঠিক পদ্ধতির মধ্যে প্রতিটি সার্ভারে উভয়ই শ্রোতার নির্দেশ অন্তর্ভুক্ত করা হয়েছে তবে কেবলমাত্র একটি সার্ভারে ipv6only = চালু করা উচিত।
কলবিজ্যাক

4
আহ, আমি এখন আপনি কি বলতে চাইছেন। আমি আপনার পোস্টটি মূলত ভুলভাবে লিখেছি। এটি আমার পক্ষে কাজ করেছে: ipv6only=onকেবলমাত্র আমার ডিফল্ট ভোস্টে (পাশাপাশি default_server) প্রত্যেকটি বন্দর তালিকাভুক্ত করা হয়েছে ; প্রতিটি vhost তারপরে IPv4 এবং IPv6 উভয় ক্ষেত্রেই কেবল নির্দিষ্ট করে listen 80;এবং listen [::]:80(কোনও অতিরিক্ত পরামিতি নেই)। এখন আমাকে যা করতে হবে তা হ'ল আমার ডুয়াল-স্ট্যাক ডোমেনগুলির জন্য এএএএ রেকর্ড যুক্ত করা এবং আমার এখানে যাওয়া ভাল। ধন্যবাদ!
ক্রোমি

1
আমার জন্যও কাজ করেছেন, তবে আমি বুঝতে পারি না কেন আমি এনজিএনএক্স একাধিক ব্লকের আইপিভি 4 এ শুনতে পারি, তবে আইপিভি 6 নয়। । তুমি কি ব্যাখ্যা করতে পারো ?
অ্যাডিয়ারলক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.