আমি অ্যাপাচি 2 ডায়নামিক ভোস্ট ফ্যালব্যাকের জন্য এই প্রশ্নটিও গুগল করতে পেরেছিলাম এবং লুসের উত্তর আমার সমস্যা সমাধানে আমাকে অনেক সহায়তা করেছে, তবে আমি এখনও আমার লক্ষ্য অর্জনে কী করেছি তা দেখাতে চাই মূলত কারণ এটি কিছু অতিরিক্ত কাজ জড়িত এবং কারণ আমি এটি মনে করি ভবিষ্যতের যে কোনও গুগলারের জন্য সহায়ক হতে পারে ...
আমার লক্ষ্য
- আমার ভিপিএসের দিকে নির্দেশ করে সমস্ত ডোমেন এবং সাবডোমেনগুলির জন্য ডায়নামিক ভোস্টিং
foo.com
হিসাবে একই বিষয়বস্তু পরিবেশন করা উচিত www.foo.com
- কোনও ধরণের ডিফল্ট অজানা ডোমেনগুলির জন্য ফলব্যাক
- অজানা সাবডোমেন জন্য ফলব্যাক
foo.com
করতে www.foo.com
যদি না www
পাওয়া যায় না, ফলব্যাক পরিবর্তে ডিফল্ট
ডিএনএস
আমার কয়েকটি ডোমেন (এবং তাদের সমস্ত সাবডোমেন) আমার ভিপিএসের দিকে নির্দেশ করছে, উদাহরণস্বরূপ:
- foo.com
- bar.com
- foobar.com
নথি ব্যবস্থা
আমার কাছে নিম্নলিখিত ডিরেক্টরি রয়েছে, ডোমেনগুলিতে উপলব্ধ সাবডোমেনগুলির নামের সাথে ডিরেক্টরি রয়েছে, www ডিরেক্টরিটি প্রয়োজন, তবে কনফিগারেশনটি যেখানে উপস্থিত নেই সেখানে পরিস্থিতি মোকাবেলা করতে সক্ষম হওয়া উচিত। লোকালহোস্ট ডিফল্ট ফ্যালব্যাক হিসাবে ব্যবহৃত হয়:
/var
/www
/localhost
/foo.com
/www
/bar
/bar.com
/foo
টেস্ট
আমার লক্ষ্যগুলি পরীক্ষারযোগ্য ক্ষেত্রে অনুবাদ করা:
- foo.com foo.com/www থেকে পরিবেশন করা উচিত
- www.foo.com থেকে পরিবেশিত হবে foo.com/www
- bar.foo.com থেকে পরিবেশিত হবে foo.com/bar
- foo.foo.com থেকে পরিবেশিত হবে foo.com/www (foo.com/foo অস্তিত্ব নেই)
- বার ডট কম লোকালহোস্ট থেকে পরিবেশন করা উচিত (বার.com/www উপস্থিত নেই)
- www.bar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (বার.com/www উপস্থিত নেই)
- foo.bar.com বার.com/ foo থেকে পরিবেশন করা উচিত
- বার.বার.কমকে লোকালহোস্ট থেকে পরিবেশন করা উচিত (বার / বারের অস্তিত্ব নেই)
- foobar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (foobar.com বিদ্যমান নেই)
- www.foobar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (foobar.com বিদ্যমান নেই)
- foo.foobar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (foobar.com বিদ্যমান নেই)
সমাধান
এই ব্যবহার করে: mod_rewrite
, mod_proxy_http
এবং অবশ্যই শুনব mod_vhost_alias
।
ServerName my.domain
ServerAdmin admin@my.domain
<VirtualHost *:80>
ServerName localhost
VirtualDocumentRoot /var/www/localhost
</VirtualHost>
<VirtualHost *:80>
ServerName sub.domain
ServerAlias *.*.*
VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3 !-d
RewriteRule (.*) http://localhost/$1 [P]
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3/%1 !-d
RewriteCond /var/www/%2.%3/www !-d
RewriteRule (.*) http://localhost/$1 [P]
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3/%1 !-d
RewriteRule (.*) http://%2.%3/$1 [P]
</VirtualHost>
<VirtualHost *:80>
ServerName bare.domain
ServerAlias *.*
VirtualDocumentRoot /var/www/%-2.0.%-1.0/www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)$ [NC]
RewriteCond /var/www/%1.%2 !-d [OR]
RewriteCond /var/www/%1.%2/www !-d
RewriteRule (.*) http://localhost/$1 [P]
</VirtualHost>
কিভাবে কাজ করে? তিনটি ভার্চুয়াল হোস্ট সংজ্ঞায়িত করা হয়েছে:
স্থানীয় হোস্ট
লোকালহোস্ট একটি ডিফল্ট হিসাবে পরিবেশন করে। সমাধানযোগ্য নয় এমন সমস্ত অনুরোধ লোকালহোস্ট দ্বারা পরিবেশন করা হয়। লোকালহোস্ট থেকে আপনার যে কোনও ডোমেইনে একটি সিমিলিংক সেটআপ করা সেই সাইটটিকে ডিফল্ট হিসাবে সেটআপ করার মতো।
sub.domain
সাব.ডোমেন ভোস্ট সমস্ত অনুরোধগুলি আকারে নিচ্ছে *.*.*
। ডিফল্টরূপে সমস্ত অনুরোধগুলি /domain.com/sub
দ্বারা সংজ্ঞায়িত হিসাবে পরিবেশন করা হয় VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3
।
পিছু হট:
প্রথমটি RewriteRule
অজানা ডোমেনগুলির যত্ন নেয়, যেমন। domain.com
লোকালহোস্ট ওয়েবসাইটটি প্রক্সিং করে ডিরেক্টরিটি বিদ্যমান নেই।
দ্বিতীয়টি ডিরেক্টরি এবং ডিরেক্টরি RewriteRule
উভয় উপস্থিত না থাকলে লোকালহোস্টের সাথেও প্রক্স হয় ।domain.com/sub
domain.com/www
তৃতীয় RewriteRule
প্রক্সি domain.com
কখন domain.com/sub
বিদ্যমান নেই। আমরা জানি domain.com/www
দ্বিতীয় পুনর্লিখনের ব্লকের কারণে অস্তিত্ব আছে।
bare.domain
খালি.ডোমেন ভোস্ট *.*
অনুরোধগুলি গ্রহণ করছে এবং সেগুলি সরবরাহ করে/domain.com/www
এখানে RewriteRule
ইচ্ছার প্রক্সি স্থানীয় হোস্টের যখন domain.com
বা domain.com/www
কোন অস্তিত্ব নেই।
^ $%। * !!!
এই সমস্ত চিহ্নগুলিতে $
এবং %
লক্ষণগুলির চারপাশে আমার মাথা জড়িয়ে কিছুটা সমস্যা ছিল RewriteCond
এবং RewriteRule
তাই আমি তাদের সম্পর্কে এখানে ব্যাখ্যা করব:
ServerAlias *.*.*
VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3/%1 !-d
RewriteRule (.*) http://%2.%3/$1 [P]
- এর
*
মধ্যে ServerAlias
রয়েছে কেবল ওয়াইল্ডকার্ড।
%n
মধ্যে VirtualDocumentRoot
থেকে এসেছ দস্তাবেজের নাম ক্ষেপক ।
%n
দ্বিতীয় RewriteCond
পছন্দসই মান নির্বাচন করে পড়ুন (.*)
প্রথম থেকে RewriteCond
যেমন। অনুরোধ করা ডোমেনের অংশগুলি।
%n
মধ্যে RewriteRule
খুব না।
$1
মধ্যে RewriteRule
নির্বাচন বোঝায় (.*)
শুরুতে RewriteRule
। যা ?
অনুরোধ url এ ডোমেন থেকে সমস্ত কিছু ক্যাপচার করে । কোনও ক্যোরিস্ট্রিং ইউআরএল দ্বারা স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যায় mod_proxy
।