سؤال هل تمتلك الخوادم موقعًا واحدًا فقط؟


اعتبارًا مما أفهمه ، فإن DNS يربط اسم النطاق بعنوان IP الخاص بالخادم الذي تم تخزين موقع الويب عليه ، فهل يعني ذلك أن كل خادم يمكنه فقط الاحتفاظ بموقع ويب واحد؟ إذا لم يفعلوا ذلك ، كيف يعرف عنوان IP للخادم معرفة موقع الويب الذي أريده إذا كان هناك الكثير على نفس الخادم؟


79
2018-06-18 03:02


الأصل


ويكيبيديا لديها مقدمة جيدة ل مشتركة استضافة المواقع. إذا قمت بإدخال http: // <IP_ADDR> / في المستعرض الخاص بك ، لن يكون لطلب HTTP مجالًا داخل Host: الرأس. في حالة الاستضافة المشتركة ، يمكن أن يقوم مزود الخدمة بتكوين خادم الويب للتعامل مع هذا الأمر بطرق مختلفة (على سبيل المثال ، أن يكون لديك عنوان افتراضي ، أو يعيد التوجيه إلى مزود ، الخ). - Jedi
لقد قمت بالنقر فوق الارتباطات التي تنقطع مع الرسائل مثل "لم يستضيف هذا الخادم الموقع الحالي الذي تبحث عنه". - aitchnyu
في حال كنت تبحث عن طريقة لتشغيل تطبيقات متعددة على خادم واحد - لنفترض أن لديك تطبيقين MyApp و YourApp على المنفذين 8001 و 8002 على التوالي. يمكن أن يكون لديك موازنتان تحميل أو وكيل تطبيق على: myapp.com و yourapp.com. اطلب منهم تلقي طلبات في المنافذ الافتراضية (80/443) وإعادة توجيهها إلى الملقم (الخوادم) الفعلي في المنفذين 8001 و 8002 على التوالي. - rohithpr
سؤال عظيم. يستخدم كل موقع ويب في حاجة إلى عنوان IP الخاص به (يمكن أن يكون لدى الخادم أكثر من عنوان IP واحد). تم تقديم رأس المضيف في HTTP / 1.1 للتعرف على المشكلة التي تصفها بالضبط. راجع "الحفاظ على عنوان الإنترنت" في www8.org/w8-papers/5c-protocols/key/key.html - A E
إذا لم يكن http 1.1 رأس المضيف ، سيتم تنفيذ ipv6 الآن ؛-) :-( - Lenne


الأجوبة:


بشكل أساسي: يشتمل المتصفح على اسم النطاق في طلب HTTP ، لذلك يعرف خادم الويب النطاق المطلوب ، ويمكنه الاستجابة وفقًا لذلك.


طلبات HTTP

إليك كيفية حدوث طلب HTTP النموذجي:

  1. يوفر المستخدم عنوان URL ، في النموذج http://host:port/path.

  2. يقوم المتصفح باستخراج جزء المضيف (domain) من عنوان URL وترجمته إلى عنوان IP عند الضرورة ، في عملية تعرف باسم تحليل الاسم. يمكن أن تحدث هذه الترجمة عبر DNS ، ولكن ليس من الضروري (على سبيل المثال ، المحلية hosts ملف على أنظمة تشغيل مشتركة يتجاوز DNS).

  3. يفتح المستعرض اتصال TCP إلى المنفذ المحدد ، أو افتراضيًا على المنفذ 80 ، على عنوان IP هذا.

  4. يرسل المستعرض طلب HTTP. بالنسبة إلى HTTP / 1.1 ، يبدو كالتالي:

    GET /path HTTP/1.1
    Host: example.com
    

    (ال Host الرأس هو المعيار والمطلوب في HTTP / 1.1. لم يتم تحديده في مواصفات HTTP / 1.0 ، ولكن بعض الخوادم تدعمه على أي حال.)

من هنا ، يحتوي خادم الويب على العديد من المعلومات التي يمكنه استخدامها لتحديد ما يجب أن تكون عليه الاستجابة. لاحظ أنه من الممكن أن يكون خادم ويب واحد مرتبطًا بعناوين IP متعددة.

  • عنوان IP المطلوب ، من مقبس TCP
    • عنوان IP للعميل متاح أيضًا ، ولكن نادرًا ما يُستخدم هذا - في بعض الأحيان للحجب / التصفية
  • المنفذ المطلوب ، من مقبس TCP
  • اسم المضيف المطلوب ، كما هو محدد في Host رأس من المستعرض في طلب HTTP.
  • المسار المطلوب
  • أي رؤوس أخرى (ملفات تعريف الارتباط ، وما إلى ذلك)

كما يبدو أنك لاحظت ، فإن إعداد الاستضافة المشتركة الأكثر شيوعًا هذه الأيام يضع العديد من مواقع الويب على عنوان IP واحد: تركيبة المنفذ ، تاركًا Host للتمييز بين مواقع الويب.

هذا هو المعروف باسم اسم المضيف الظاهري في Apache-land ، في حين أن Nginx تستدعيهم أسماء الخادم في كتل الخادم ويفضل IIS خادم إفتراضي.


ماذا عن HTTPS؟

HTTPS مختلفة بعض الشيء. كل شيء مماثل لإنشاء اتصال TCP ، ولكن بعد ذلك يجب إنشاء نفق TLS مشفر. الهدف هو عدم تسرب أي معلومات حول الطلب.

للتحقق من أن الخادم يمتلك هذا النطاق بالفعل ، يجب أن يرسل الخادم شهادة موقعة من طرف ثالث موثوق به. سيقارن المتصفح هذه الشهادة مع النطاق الذي طلبه.

هذا يمثل مشكلة. كيف يمكن للخادم معرفة شهادة المضيف (موقع الويب) التي سيتم إرسالها ، إذا كان يلزم القيام بذلك قبل استلام طلب HTTP؟

تقليديا ، تم حل هذا من خلال وجود عنوان IP مخصص (أو منفذ) لكل موقع يتطلب HTTPS. من الواضح أن هذا الأمر سيؤدي إلى إشكالية عندما نبدأ في نفاد عناوين IPv4.

أدخل SNI (إشارة اسم الخادم). يقوم المتصفح الآن بتمرير اسم المضيف أثناء مفاوضات TLS ، بحيث يكون لدى الخادم هذه المعلومات في وقت مبكر بما فيه الكفاية لإرسال الشهادة الصحيحة. على جانب الخادم ، يشبه التكوين إلى حد كبير كيفية تكوين مضيفات HTTP الظاهرية.

الجانب السلبي هو تم تمرير اسم المضيف الآن كنص عادي قبل التشفير ، وهي معلومات تم تسريبها بشكل أساسي. يعتبر هذا عادة مقايضة مقبولة ، مع الأخذ في الاعتبار أن اسم المضيف عادة ما يتم عرضه في استعلام DNS على أي حال.


ماذا لو طلبت موقعًا باستخدام عنوان IP فقط؟

ما يفعله الخادم عندما لا يعرف المضيف المحدد الذي طلبته يعتمد على تنفيذ الخادم وتكوينه. عادةً ، يوجد موقع "افتراضي" أو "catchall" أو "fallback" محددًا سيوفر ردودًا على جميع الطلبات التي لا تحدد مضيفًا بشكل صريح.

يمكن أن يكون هذا الموقع الافتراضي هو موقع مستقل خاص به (غالبًا ما يظهر رسالة خطأ) ، أو يمكن أن يكون أيًا من المواقع الأخرى على الخادم ، بناءً على تفضيل مسؤول الخادم.


149
2018-06-18 03:11



أيضا ، قد يتم تقسيم موقع واحد عبر العديد من الخوادم ، كما هو الحال مع موازن التحميل ، مثل استخدام Heroku والأمازون. - phyrfox
phyrfox نعم ، فكرت في إضافة ذلك ، لكنه مرتبط بشكل طفيف فقط بالمسألة ولم أرغب في جعل الإجابة طويلة جدًا. قد ينتهي الأمر بإضافة قسم له في وقت لاحق. - Bob
تقول الأسطورة أن النطاقات الفرعية تشير إلى أجهزة كمبيوتر محددة داخل الشبكة. نظريا - Loupax
"تقليديا ، تم حل هذه المشكلة من خلال الحصول على عنوان IP مخصص (أو منفذ) لكل موقع يتطلب بروتوكول HTTPS. من الواضح أن هذا الأمر يسبب مشاكل عند بدء نفاذ عناوين IPv4." ، لذلك بدون هذا الإلحاق ، سيكون لدينا جميعًا ipv6 الآن . - Lenne


لدي هذا التفسير للأشخاص غير التقنيين.

يعيش جاك وجيل وجو في صالة نوم مشتركة ، وليس لديهم هواتف جوالة.

في دليل الهاتف ، يتم سردها كلها بنفس الرقم. (سجل)

أنت تطلب الرقم ، ويلتقط شخص ما الهاتف ؛ تقول "أود أن أتحدث إلى جيل" ، وتحصل عليها على الخط.

بدلاً من A-record (A phonenumber / IP-adress) في دليل الهاتف ، قد يكون فقط "Dormitory X" ، ثم يجب أن تبحث عن رقم Dormitory X. هذا هو سجل CNAME.

إذا لم تكن Jill متوفرة ، فقد تحصل عليها

  • 404 جيل ليست هنا
  • 410 موت ميت.
  • 301 يتم نقل جيل مع بيتر
  • 302 جيل تزور بيتر ، اتصل به بدلا من ذلك

  • 400 لا أستطيع فهمك.

  • 401 من أنت؟ ما هي كلمة المرور؟ أو لا نسمح بالمتصلين الذكور بعد الساعة 10 مساءً
  • 402 مطلوب الدفع (هل أنت متأكد من Jill هو اسمها الحقيقي ؛-))
  • 403 لا ، ليست كلمة المرور الصحيحة.
  • 418 جيل إبريق :-)
  • 429 لا تستطيع Jill إجراء أي مكالمات أخرى.
  • 451 أنت تنتهك أمر التقييد الخاص بك.

  • 500 نظام الهاتف لدينا قد انهار.


92
2018-06-18 17:15



للفضول فإن RFC وراء 418 هو tools.ietf.org/html/rfc2324 ومقال مثير للاهتمام sitesdoneright.com/blog/2013/03/... :) - Wordzilla


اعتبارًا مما أفهمه ، فإن DNS يربط اسم النطاق بعنوان IP الخاص بالخادم الذي تم تخزين موقع الويب عليه ، فهل يعني ذلك أن كل خادم يمكنه فقط الاحتفاظ بموقع ويب واحد؟

أولاً ، يجب أن تفهم أن هناك عددًا من المفاهيم المتميزة هنا.

  • موقع ويب ، مجموعة من صفحات الويب التي تشكل كلًا متماسكًا.
  • عنوان IP ، عنوان رقمي (32 بت لـ IPv4 ، 128 بت لـ IPv6) يستخدمه بروتوكول الإنترنت كمصدر أو وجهة لحركة المرور.
  • الخادم ، وهو الجهاز الذي تتمثل مهمته في تلبية طلبات العملاء.
  • اسم المضيف ، اسم يستخدم لتحديد جهاز في نظام أسماء النطاقات (على سبيل المثال "www.example.com" أو "en.wikipedia.org")

لا توجد علاقة فردية بين أي من هذه الأشياء. يمكن أن يكون لخادم واحد عناوين IP متعددة ؛ يمكن أن تشير أسماء المضيفين المتعددة إلى عنوان IP واحد ؛ يمكن أن يشير اسم مضيف واحد إلى عناوين IP متعددة. يمكن أن تكون مواقع الويب المتعددة تحت اسم المضيف نفسه. يمكن نشر موقع واحد عبر عدة أسماء مضيفين.

إذا لم يفعلوا ذلك ، كيف يعرف عنوان IP للخادم معرفة موقع الويب الذي أريده إذا كان هناك الكثير على نفس الخادم؟

في الأيام القديمة (HTTP 1.0 وما قبله) كان لكل اسم مضيف يريد الخادم التعامل معه بشكل مختلف أن يكون له عنوان IP خاص به. كان هذا مسرفًا إلى حد ما.

HTTP 1.1 أضاف Host"header كحقل إلزامي في طلب HTTP (IIRC قام بعض البائعين باعتماد هذا سابقًا كملحق). هذا ما أخبر الخادم الذي تم طلب اسم المضيف له ، وبالتالي سمح له بتقديم محتوى مختلف لأسماء مضيف مختلفة على نفس عنوان IP. ل HTTP 1.1 في العملاء هو الآن في كل مكان.

للأسف ، أضافت طبقة المقابس الآمنة (TLS لاحقًا) تجاعيدًا. يتطلب إنشاء جلسة عمل SSL / TLS من الخادم تقديم شهادة للعميل تغطي اسم المضيف المطلوب ، ولكن لا يصل طلب HTTP إلا بعد إنشاء جلسة SSL / TLS.

من الممكن أن يكون لديك شهادة واحدة تغطي أسماء مضيف متعددة من خلال استخدام SubjectAltName الحقل أو استخدام أحرف البدل في CommonName حقل. ومع ذلك ، فإن هذا يطرح تحديات إدارية ، خاصة إذا كانت أسماء المضيفين المعنية تقع تحت نطاقات ذات ملكية مختلفة.

لذلك قدم TLS ملحق "إشارة اسم الخادم" (SNI). باستخدام هذا الملحق ، يرسل العميل اسم المضيف المطلوب إلى الخادم أثناء إجراء اتصال TLS. يمكن للخادم بعد ذلك تقديم الشهادة المناسبة. لسوء الحظ ، في حين أن الإصدارات الحالية من جميع تطبيقات SSL / TLS الرئيسية تدعم SNI ، فقد استغرق وقتًا طويلاً لإسقاط الإصدارات القديمة من الاستخدام.


6
2018-06-19 05:23



نسيت أن أذكر أن برنامج التعاون الفني يمكن الاستماع على العديد من المنافذ ، وتشغيل خوادم مختلفة على كل ... - Toby Speight
نعم ، ولكن ليس لديك أرقام في نظام أسماء النطاقات ، ولا يمكنك أن تتوقع أن تذهب إلى joe.p.user our.fabulous.site:81 بالإضافة إلى ذلك ، تمنع بعض جدران الحماية الوصول الخارج إلى العدادات غير القياسية. - Lenne


الجواب أكثر تعقيدًا بعض الشيء مما جعلته بعض الأجوبة. عند إجراء بحث DNS ، يجب أن تحصل على عنوان IP (A سجل لـ IPv4 ، AAAA ل IPv6). يجب أن تكون قادراً على فتح مأخذ توصيل عبر TCP / IP للاتصال أو فشل كل شيء. قد يمثل هذا العنوان خادمًا أو قد يمثل موازن تحميل. يمكن أن يمثل حتى الوكيل. إذا كان المضيف خلف CloudFlare ، على سبيل المثال ، فإن العنوان الذي تحصل عليه هو خادم CloudFlare. الخادم الحقيقي هو في مكان آخر. يتيح هذا للمضيف تجنب المشاكل مثل هجمات رفض الخدمة.

استضافة افتراضية هو ما تسأل عنه (بعض من الأسئلة الأخرى تطرقت إلى هذا ، ولكن ليس بأي تفاصيل). تأخذ الاستضافة الظاهرية طلب الويب وتنظر في اسم المضيف (على سبيل المثال domain.com) لتحديد موقع الويب الذي يتم عرضه. حتى في خادم الويب اباتشي HTTP سيكون لديك تكوين مثل هذا

<VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com

    DocumentRoot /var/www/domain.com
</virtualHost>

يتم تبسيط هذا على سبيل المثال. لذلك نحن نقول لأباتشي للاستماع على المنفذ 80 من أي IP (في جهاز ظاهري حديث يستضيف IP الخاص بجهازك قد يكون مختلفًا عن IP الخاص به). ثم نقول أن هذا هو domain.com الموقع وما الدليل الذي يعيش تحت هذا الموقع. يمكننا بعد ذلك تكرار هذا الحظر مرارًا وتكرارًا لإخبار Apache بالتعامل مع مواقع الويب المختلفة. كل خادم ويب يدعم هذا النوع من النظام.

هناك طريقة أخرى للتعامل مع ذلك تتمثل في إعلام خادم الويب بتوجيه كل حركة مرور الويب إلى نص برمجي واحد (أي PHP ، ASP.NET ، إلخ) ، وبعد ذلك سيحدد هذا النص الواحد موقع الويب والصفحة التي سيتم عرضها.


3
2018-06-20 20:54





باستخدام DNS يمكنك تعيين العديد من الأسماء لعنوان IP فردي كما تريد (في يستضيف الملف يمكنك ببساطة فصل كل اسم بمسافات ، على سبيل المثال). باستخدام خادم DNS يمكنك أيضا تعيين عناوين IP متعددة لاسم واحد. لا يقتصر على علاقة رأس برأس.

يعرف خادم الويب أي موقع يخدمه دراسة الرابط المطلوب. ينظر إلى النطاق الذي تم طلبه ، والميناء الذي تم طلبه وما هو البروتوكول الذي تم استخدامه. هذا لا علاقة له مع DNS ويتم التعامل معها بواسطة بروتوكول HTTP.


1
2018-06-18 03:15





خادم الويب لديه مفهوم الحاوية المضيفة (هنا هي وثائق للقطط ، على سبيل المثال). يمكن تكوين حاويات مضيف متعددة لنفس عنوان box / ip ، مع خدمة نطاقات متعددة. حاويات لها أدلة العمل المستقلة ، عوالم التوثيق ، دلائل السجل وأشياء تشبه.

يجد الخادم الحاوية المعنية للطلب الجديد الذي يشتري اسم النطاق جزءًا من طلب HTTP هذا.

يمكن أن تشترك مثيلات خادم الويب المختلفة تمامًا في نفس عنوان IP إذا كانت تعمل على منافذ مختلفة. يتم استخدام هذا في الغالب في بيئات التطوير والاختبار المختلفة حيث قد لا تتوفر أسماء النطاقات ، حيث لا يمكن تشغيل خادم الإنتاج على منفذ عشوائي.

وأخيرًا ، حتى إذا كان عنوان IP الفريد من نوعه مطلوبًا لموقع ويب ، فغالبًا ما يحتوي صندوق الخادم على العديد من محولات الشبكة ، لذلك تمت تهيئته لاستخدام عناوين IP متعددة.


0
2018-06-20 07:49





يمكن لعنوان IP الخاص بالخادم الاحتفاظ بالعديد من أسماء النطاقات المختلفة في نفس الوقت.

عندما تصل إلى موقع الويب ، يرسل متصفحك طلب HTTP باسم النطاق ، ويمكن للخادم العثور على بيانات موقع الويب التي يجب أن يرسلها إليك في ذلك الوقت.

يطلق عليه المضيف الظاهري ، في غاية البساطة :)

إلق نظرة هنا لمزيد من المعلومات حول DNS والمضيفات الظاهرية.


0
2017-07-23 06:59