resolver
Nginx প্রক্সি কনফিগারেশন থেকে ঠিকানা সেট করা সম্ভব /etc/resolv.conf
?
এটি উদাহরণস্বরূপ ডকারে বা ভার্চুয়াল পরিবেশে কার্যকর হতে পারে।
resolver
Nginx প্রক্সি কনফিগারেশন থেকে ঠিকানা সেট করা সম্ভব /etc/resolv.conf
?
এটি উদাহরণস্বরূপ ডকারে বা ভার্চুয়াল পরিবেশে কার্যকর হতে পারে।
উত্তর:
দুর্ভাগ্যক্রমে এটি করার সহজ কোনও উপায় নেই কারণ এনজিনেক্স এর নিজস্ব রেজলভার বাস্তবায়ন ব্যবহার করে। দুটি সমাধান আমি দেখতে পাচ্ছি:
1) আপনি কোনও স্ক্রিপ্ট থেকে সমাধানের তালিকা তৈরি করেন এবং এটি অন্তর্ভুক্ত করুন, যেমন:
echo resolver $(awk 'BEGIN{ORS=" "} $1=="nameserver" {print $2}' /etc/resolv.conf) ";" > /etc/nginx/resolvers.conf
http {
include resolvers.conf;
}
২) আপনি (খুব) পরীক্ষামূলক পার্ল মডিউলটির মতো তৃতীয় পক্ষের মডিউল সহ এনজিঙ্ক্স পুনরায় সংকলন করুন এবং একটি পরিবর্তনশীল হ্যান্ডলার লিখুন:
http {
perl_modules perl/lib;
perl_set $resolvers '
sub {
return system("awk BEGIN{ORS=\" \"} /nameserver/{print \$2}" /etc/resolv.conf");
};
resolver "$resolvers";
}
এখন, আপনি যদি কোনও সি কোডারের জাহান্নাম হন (কিছু রক্তের জন্য আপনার চোখ প্রস্তুত করুন), আপনি এখনও এইভাবে কাজ করতে একটি বিকল্প প্যাচ বা মডিউল লিখতে পারেন।
ডকার ব্যবহারকারীদের জন্য, সমাধানটি এখানে পাওয়া গেছে :
ডকার ব্যবহার করে এমন লোকদের জন্য একদম কার্যকরী নয়।
export NAMESERVER=`cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}' | tr '\n' ' '`
এটি যা করে তা হ'ল সমস্ত
nameserver
এন্ট্রি নেওয়া/etc/resolv.conf
এবং এগুলি একটি লাইনে মুদ্রণ করা, যাতে আপনি এগুলি এনজিনেক্সেরresolver
নির্দেশে ব্যবহার করতে পারেন । আপনার ডকফাইফিলের এন্ট্রিপয়েন্টের জন্য একটি কাস্টম স্ক্রিপ্ট থাকা দরকার যা কনফিগারেশন ফাইল তৈরি করে এবং তারপরে এনজিনেক্স শুরু করে। আমাদের বলুন যে আপনার কাছে এমন একটি ফাইল রয়েছেnginx.conf.template
যা দেখতে এমন কিছু দেখাচ্ছে:
...snip...
http {
server {
resolver $NAMESERVER valid=10s;
...snip....
}
}
}
আপনার স্টার্টআপ স্ক্রিপ্টটি
envsubst
প্রোগ্রাম তৈরি করতেnginx.conf
এবং তারপর এনজিনেক্স শুরু করতে পারে can উদাহরণ:
#!/bin/bash
if [ "$NAMESERVER" == "" ]; then
export NAMESERVER=`cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}' | tr '\n' ' '`
fi
echo "Nameserver is: $NAMESERVER"
echo "Copying nginx config"
envsubst '$NAMESERVER' < /nginx.conf.template > /nginx.conf
echo "Using nginx config:"
cat /nginx.conf
echo "Starting nginx"
nginx -c /nginx.conf -g "daemon off;"
নোট করুন যে ডকারে এটি একই ফাইলে পরিণত হয়, পূর্বনির্ধারিত ডকার এম্বেড করা ডিএনএস সার্ভার হিসাবে 127.0.0.11
, ডকার নেটওয়ার্ক এনগিনেক্স রিসলভারটির এই উত্তরটি দেখুন ।
যদি আপনার সিস্টেমটি রেজলভকনফ ব্যবহার করে (অনেক ভার্চুয়াল মেশিন যেমন করে তবে দুর্ভাগ্যক্রমে ডকার তা দেখেন না man 8 resolvconf
), আপনি সম্ভবত এনজিনেক্স তৈরি করতে পারেন resolvers.conf
(অন্য উত্তরের মতো) /etc/resolvconf/update-libc.d/nginx
। সমাধানকারীদের গতিশীল পরিবর্তনের বিরল ক্ষেত্রেও এটি দুর্দান্তভাবে আচরণ করে।
#!/bin/sh
conf="resolver $(/usr/bin/awk 'BEGIN{ORS=" "} $1=="nameserver" {print $2}' /etc/resolv.conf);"
[ "$conf" = "resolver ;" ] && exit 0
confpath=/etc/nginx/conf.d/resolvers.conf
if [ ! -e $confpath ] || [ "$conf" != "$(cat $confpath)" ]
then
echo "$conf" > $confpath
service nginx reload >/dev/null
fi
exit 0
কিছু লিনাক্স বিতরণ /etc/nginx/conf.d/*.conf
তাদের ডিফল্ট কনফিগারেশন অন্তর্ভুক্ত । পরিষেবাটি চলমান না থাকলে সাধারণত পুনরায় লোড উপেক্ষা করা হয়। লক্ষ করুন স্ক্রিপ্টটি /usr/bin
PATH ব্যতীত চলতে পারে , যাতে আপনার অবাস্তব পথে যাওয়ার জন্য নিখুঁত পথের প্রয়োজন হতে পারে।
আপনি যদি এনগিনেক্সের ওপেনেরস্টি সংস্করণটি ব্যবহার করছেন তবে আপনি local
সেই resolver
নির্দেশের জন্য তাদের বিশেষ যুক্তিটি ব্যবহার করতে পারেন যা সেট করার পরে local=on
, এর অর্থ হল স্ট্যান্ডার্ড পাথটি রিসলভারটি/etc/resolv.conf
ব্যবহার করবে (আরও তথ্যের জন্য ওপেনস্ট্রি রেজলভার ডক্স দেখুন ):
resolver local=on;
export NAMESERVER=$(awk '/^nameserver/{print $2}' /etc/resolv.conf)
। প্রয়োজন নেইcat
,grep
বাtr
সেখানে নেই।