অ্যাপাচি ডিফল্ট / ক্যাপ-সমস্ত ভার্চুয়াল হোস্ট?


67

আমার কাছে যদি 3 টি ডোমেন, ডোমেইন 1.com, ডোমেন 2.com এবং ডোমেইন 3.com থাকে তবে ডোমেন তালিকাভুক্ত নয় এমন ডিফল্ট ভার্চুয়াল হোস্ট সেটআপ করা কি সম্ভব? উদাহরণস্বরূপ, যদি আমি থাকি:

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>

আপনি যদি কোনও ডোমেন নিবন্ধভুক্ত করেন এবং এটি আমার সার্ভারে দেখান, এটি ডোমিন 3 এর মতো দেখানো অরিথিংজলে ডিফল্ট হবে। এটা কি সম্ভব?

উত্তর:


45

হ্যাঁ, এটি কাজ করা উচিত, সার্ভারএলিয়াস ব্যতীত "*" হওয়া উচিত, সার্ভারনামের সাথে একটি আসল হোস্টনাম সেট করা আছে। ভার্চুয়ালহোস্টটি হ'ল সর্বশেষে লোড হওয়া আপনার এটি নিশ্চিত করতে হতে পারে ...


এটি কাজ করা উচিত, কিন্তু না। যদি কোনও ডোমেন নির্দিষ্টভাবে তালিকাভুক্ত না হয় তবে আমি "ফায়ারফক্স সার্ভারটি খুঁজে পাবে না" get
এসজেগুয়ার 13

2
আপনি কি এটি "সার্ভারনাম হোস্ট" এবং "সার্ভারআলিয়াস *" হিসাবে সেট করেছেন? আমি প্রাথমিকভাবে এটি যথেষ্ট জোর দিয়েছি না, তবে সার্ভারনাম ওয়াইল্ডকার্ড নেয় না, কেবল সার্ভারআলিয়াসই করে। সার্ভারনামের একটি আসল হোস্ট-নেম হওয়া দরকার।
ফ্রেইহাইট

এছাড়াও, অন্যান্য ভার্চুয়ালহোস্টগুলি কি কাজ করে? অ্যাপাচে কি সংস্করণ?
ফ্রেইইট

"ফায়ারফক্স সার্ভারটি খুঁজে পাচ্ছে না।" অ্যাপাচি সমস্যা নয়। আপনার আরও বিশদ প্রয়োজন (যদি কোনও সার্ভারের সাথে যোগাযোগ করা হয় তবে ত্রুটির কোডটি কী ...)
Law29

অদ্ভুত যেটি আমার পক্ষে কাজ করে না, এটি সর্বদা হোস্ট শিরোনাম নির্বিশেষে প্রথম ভার্চুয়ালহোস্টটি বেছে নেয়
jjxtra

80

নাম ভিত্তিক ভার্চুয়াল হোস্টগুলি ব্যবহার করার সময় লোড হওয়া প্রথম ভার্চুয়াল হোস্ট কনফিগারেশনটি ডিফল্ট হবে (উত্স: অ্যাপাচি উইকি )। উদাহরণস্বরূপ, নীচের কনফিগারেশনের সাথে অন্যথায় মেলে না এমন ডোমেনগুলির সাথে মেলে domain-one.com:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName domain-one.com
  # Other options and directives ..
</VirtualHost>

<VirtualHost *:80>
  ServerName domain-two.com
  # Other options and directives ..
</VirtualHost>

অনেক সার্ভারের একচেটিয়া কনফিগারেশন ফাইল থাকে না, তবে কয়েকটি হোস্ট-নির্দিষ্ট কনফিগারেশন ফাইল নীচে সাজানো থাকে:

/etc/apache2
|-- sites_available  (actual configuration files)
`-- sites_enabled    (symlinks to files in sites_available)

এই ক্ষেত্রে, প্রথমে একটি নির্দিষ্ট ভার্চুয়াল হোস্ট কনফিগারেশন লোড করতে, সিমলিংকের নতুন নামকরণ করুন যা প্রথমে সাজানো হবে যেমন, যেমন 00-default


অন্যান্য উত্তরগুলির কিছু সঠিকভাবে নয়। অ্যাপাচি উইকের মতে ভার্চুয়াল হোস্টে সেট নাServerName করা ভুল। হোস্ট ব্যতীত যদি ServerNameপ্রথমে লোড না হয় তবে অ্যাপাচি কখনও এটি ব্যবহার নাও করতে পারে, কারণ লোড হওয়া প্রথম হোস্টটি ডিফল্ট হবে।

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


স্যার আপনাকে + 1 মিলিয়ন ইন্টারনেট করে! এটি ডিফল্ট হতে হবে।
রায়ান

আপনি কি জানেন যে কোনটি প্রথমে আসে, httpd.conf বা conf.d / xyz.conf?
এশা ভেরেমো

2
এক্সএএমপিপি (উইন্ডোজ) এর স্থানীয় এসএসএল ডোমেনগুলির সাথে আমার সমস্যার সমাধান "প্রথম ভার্চুয়াল হোস্ট কনফিগারেশনই হবে ডিফল্ট।" দেখে মনে হচ্ছে অ্যাপাচি প্রতিটি বন্দরের জন্য ডিফল্ট হিসাবে প্রথম ভোস্ট ব্যবহার করে, তাই অনিরাপদ / সুরক্ষিত উভয় অনুরোধের জন্য অ-ম্যাচড ডোমেনগুলি সঠিকভাবে পরিচালনা করতে, 80/443 পোর্টগুলির জন্য 2 টি স্পষ্ট "ডিফল্ট" কনফিগার থাকা উচিতhttpd-vhosts.conf
Wirone

1
@ এ্যাসাভেরেমো - httpd.conf প্রথমে লোড হবে এবং এতে একটি অন্তর্ভুক্ত লাইন থাকবে যা সূত্রগুলি কনফারেন্স.ড / xyz.conf (অথবা সম্ভবত, কনফিডেডি / *) sources অন্তর্ভুক্ত রেখার আগে কোনও কনফিগার (vhosts সহ) প্রথমে প্রক্রিয়া করা হবে; অন্তর্ভুক্ত লাইন পরে কিছু অন্তর্ভুক্ত ফাইল পরে প্রক্রিয়া করা হয়।
ড্যান প্রাইটস

7

কোনও সার্ভেনাম নির্দিষ্ট করবেন না এবং এটি আপনার ডিফল্ট ভোস্ট হয়ে যায় ..

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
</VirtualHost> 

এছাড়াও নিশ্চিত হন যে আপনি মূল httpd.conf ফাইলে একটি ডকুমেন্টরুট নির্দিষ্ট করেন নি, কারণ এটি vhosts এর চেয়ে বেশি প্রাধান্য পাবে।


আমার কাছে এটি প্রথম তালিকাভুক্ত ভার্চুয়াল হোস্ট হিসাবে আছে এবং আমি এখনও পেয়েছি "ফায়ারফক্স সার্ভারটি সন্ধান করতে পারে না"।
এসজেগুয়ার 13

2
আমি একমত নই সার্ভারনাম ছাড়াই আমার প্রথম ভার্চুয়াল হোস্ট সেট ছিল, তবে এটি কিছু ভার্চুয়াল হোস্টের সাথে দ্বন্দ্ব বলে মনে হচ্ছে, তবে অন্যদের সাথে নয়। আমি একটি সার্ভারনাম যোগ করে সমস্যার সমাধান করেছি, তবে এটি আমার সার্ভারে নেই এমন কিছু এলোমেলো ডোমেনে সেট করে। যেহেতু এটি প্রথম ভার্চুয়াল হোস্ট, এটি ডিফল্ট হিসাবে ব্যবহৃত হয়, তবে কেবল তখনই মেলে যখন কোনও ডোমেন অন্য কোনও সার্ভারনামের সাথে মেলে না used
জোশাইদান

3

অর্ডারটি গুরুত্বপূর্ণ - সমস্ত কিছুর জন্য আপনার ভোস্ট সংজ্ঞাটি তালিকার শীর্ষে স্থানান্তর করুন।


2

_Default_ ভার্চুয়াল হোস্টটি ব্যবহার করুন এবং http://httpd.apache.org/docs/2.2/vhosts/exferences.html হিসাবে উল্লিখিত হিসাবে এটি প্রথমে httpd-vhosts.conf এ রাখুন

"কোনও অনুরোধকৃত আইপি ঠিকানা এবং পোর্টে প্রতিটি অনুরোধটি ধরা, অর্থাত্, কোনও ঠিকানা / পোর্ট সংমিশ্রণ যা অন্য কোনও ভার্চুয়াল হোস্টের জন্য ব্যবহার করা হয় না [...] একটি ডিফল্ট ভোস্ট কখনও কোনও অনুরোধ দেয় না যা কোনও ঠিকানা / বন্দরে প্রেরণ করা হয়েছিল যা নাম ভিত্তিক vhosts জন্য ব্যবহৃত হয়। যদি অনুরোধটিতে কোনও অজানা বা কোনও হোস্ট: হেডার থাকে তবে এটি সর্বদা প্রাথমিক নাম-ভিত্তিক vhost থেকে পরিবেশন করা হয় (কনফিগারেশনের ফাইলের মধ্যে প্রথমে প্রদর্শিত হবে এমন ঠিকানা / পোর্টের জন্য ভোস্ট) ""

একটি লাইভ কিন্তু অবহেলিত httpd-vhosts.conf থেকে স্নিপেট যা 80 টি পোর্টে সমস্ত vhosts লক করতে ঘটে:

# Listen for virtual host requests on all IP addresses.
# This directive cannot be removed:
NameVirtualHost *:80

<VirtualHost _default_:80>
# This vhost catches client requests with host headers which have
# not been matched by ServerName or ServerAlias directives in other vhosts.
#
# We redirect all such requests to a particular named vhost:
    RewriteCond %{HTTP_HOST}    ^(.*)$
    RewriteRule ^(.*)$  http://my.site.of.choice [R=permanent,L]
</VirtualHost>

# Name based vhosts here:
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName  my.other.site
    ServerAlias my.other.site2 my.other.site3
</VirtualHost>

# more vhosts etc...

ভোস্টের মিলের প্রক্রিয়াটির গভীরতার ব্যাখ্যা এখানে পাওয়া যাবে: http://httpd.apache.org/docs/2.2/vhosts/details.html


2
_default_কেবল অ-ম্যাচ করা আইপিগুলির জন্য ব্যবহৃত হয় , সুতরাং আপনার ওয়াইল্ড কার্ডেড ভোস্ট (*: 80) থাকলে এটি কখনই ব্যবহার করা হবে না।
Wirone

2

ওয়াইল্ডকার্ড আপনার সাইট কনফিগারেশন ফাইল অন্তর্ভুক্ত:

Include path/to/site/confs/*httpd.conf

আপনার সাইট কনফ ফাইলগুলি এমনভাবে সংগঠিত করুন যাতে সেগুলি প্রত্যাশিত ক্রমে লোড হয়। উদাহরণ ...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

ইত্যাদি ...

এপাচি ক্রমক্রমে এগুলি পড়বে। তারপরে এমন একটি তৈরি করুন যা যেকোন মিলহীন ভার্চুয়াল হোস্টগুলি ধরার জন্য সর্বদা শেষ লোড হবে এবং কোনও ডিফল্ট সাইট লোড করার পরিবর্তে 404 ফেরত আসবে।

99-ক্যাচঅল-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

আপনার httpd যা শোনে তার বন্দরগুলির সাথে পোর্টগুলি প্রতিস্থাপন করতে ভুলবেন না। অথবা যদি আপনার নির্দিষ্ট ইন্টারফেসে httpd শোনা থাকে তবে আপনার পরিবর্তে প্রতিটি ইন্টারফেসের জন্য একটি ক্যাচল যুক্ত করতে হবে:

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

আশাকরি এটা সাহায্য করবে. আমি নির্ধারিত ক্রমগুলিতে সাইটগুলি লোড করার জন্য এই পদ্ধতিটি ব্যবহার করি এবং অপ্রত্যাশিত সাইটটি অপ্রত্যাশিতভাবে লোড করা থেকে মেলে না virtual


1

"1" দিয়ে শুরু হওয়া সাইট কনফিগারেশন ফাইলটির নাম পরিবর্তন করা সর্বোত্তম সমাধান হ'ল এটি প্রথমে লোড হবে এবং এটি আপনার ডিফল্ট সাইট হবে।

অ্যাপাচি 2 প্রথম লোড হওয়া vhost ফাইলটিকে ডিফল্ট পৃষ্ঠা হিসাবে তৈরি করে।


000-defaultএই কারণে ডিফল্ট অ্যাপাচি ইনস্টলেশনটিতে ভার্চুয়াল হোস্টও রয়েছে ।
vp_arth

0

<VirtualHost *:port>আপনার যত্ন নেওয়া হোস্টগুলির জন্য সার্ভারনাম / সার্ভারএলিয়াস ব্যবহার এবং নির্দিষ্ট করার সময়, যা আমার করা দরকার।

আমার পরিস্থিতিতে কিছুটা পটভূমি:

আমার আইএসপি থেকে আমার একটি ডায়নামিক আইপি ঠিকানা রয়েছে সুতরাং আমার আইপি ঠিকানাটি একটি গতিশীল আইপি ঠিকানা নিবন্ধকরণ সংস্থায় (আমার ক্ষেত্রে noip.org) নিবন্ধিত হয়। আমার "হোস্টগুলির" একজনকে আমার ডিএনএস রেজিস্ট্রেশনে myabc.example.com হিসাবে সিআইএন হিসাবে নিবন্ধিত করা দরকার যা হোস্ট 1.ddns.net নির্দেশ করে। হোস্ট 2.ddns.net যেমন ছিল তেমনই রেখে দেওয়া হয়েছিল। আমি চাইছিলাম myabc.example.com এবং host1.ddns.net সাইট 1 এ এবং হোস্ট 2.ddns.net সাইট 2 এ যেতে এবং আমার আইপি ঠিকানা সহ অন্য কোনও কিছু ডিফল্ট যেতে চাই।

প্রথম conf ফাইলে পরিবর্তন পঠিত ডিফল্ট, অর্থাত হতে হবে 000_def.conf, 001_site1.conf, 002_site2.confসঙ্গে, যাতে পড়তে হবে 000_def.confডিফল্ট সাইট হিসাবে। (দ্রষ্টব্য: আমার ক্ষেত্রে আমার কাছে এই "ফাইলগুলি" রয়েছে /etc/apache2/sites-enabledযা প্রকৃত কনফারেন্স ফাইলে আসলে গতিশীল লিঙ্কগুলি রয়েছে /etc/apache2/sites-available)

যেহেতু সার্ভারনামটি 001_site1.conf এবং 002_site2.conf এ ব্যবহৃত হচ্ছে, এটি অবশ্যই 000_def.conf এ সেট করতে হবে।

# 000_def.conf:
<VirtualHost *:80>  
ServerName null
# NOTE: DO NOT USE "ServerAlias *" this seems to override the other conf files.
</VirtualHost>


# 001_site1.conf
<VirtualHost *:80>  
ServerName myabc.example.com
ServerAlias mylocalhostname host1.ddns.net
</VirtualHost>


# 002_site2.conf:
<VirtualHost *:80>  
ServerName host2.ddns.net
</VirtualHost>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.