Antipattern: چندین میزبان مجازی با نام مستعار میزبان و شماره پورت را تعریف کنید

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

در Apigee Edge، یک روتر تمام ترافیک ورودی API را مدیریت می‌کند. این بدان معناست که تمام درخواست‌های HTTP و HTTPS به یک پروکسی Edge API ابتدا توسط یک روتر Edge مدیریت می‌شوند. بنابراین، درخواست پروکسی API باید به آدرس IP و پورت باز روی یک روتر هدایت شود.

یک میزبان مجازی به شما امکان می‌دهد چندین نام دامنه را روی یک سرور یا گروهی از سرورها میزبانی کنید. برای Edge، سرورها معادل Edge Routers هستند. با تعریف میزبان‌های مجازی روی یک Router، می‌توانید درخواست‌ها را به چندین دامنه مدیریت کنید.

یک میزبان مجازی در Edge یک پروتکل (HTTP یا HTTPS) را به همراه یک پورت روتر و یک نام مستعار میزبان تعریف می‌کند. نام مستعار میزبان معمولاً یک نام دامنه DNS است که به آدرس IP روتر نگاشت می‌شود.

برای مثال، تصویر زیر یک روتر با دو تعریف میزبان مجازی را نشان می‌دهد:

در این مثال، دو تعریف میزبان مجازی وجود دارد. یکی درخواست‌های HTTPS را در دامنه domainName1 و دیگری درخواست‌های HTTP را در دامنه domainName2 مدیریت می‌کند.

در صورت ارسال درخواست به یک پروکسی API، روتر هدر میزبان و شماره پورت درخواست ورودی را با لیست نام‌های مستعار میزبان تعریف شده توسط همه میزبان‌های مجازی مقایسه می‌کند تا مشخص کند کدام میزبان مجازی درخواست را مدیریت می‌کند.

پیکربندی نمونه برای میزبان‌های مجازی در زیر نشان داده شده است:

نمونه پیکربندی vhost

ضدالگو

تعریف چندین میزبان مجازی با نام مستعار میزبان و شماره پورت یکسان در محیط‌های یکسان/متفاوت یک سازمان یا بین سازمان‌های مختلف، منجر به سردرگمی در زمان مسیریابی درخواست‌های API می‌شود و ممکن است باعث خطاها/رفتارهای غیرمنتظره شود.

بیایید با یک مثال پیامدهای داشتن چندین میزبان مجازی با نام مستعار میزبان یکسان را توضیح دهیم.

در نظر بگیرید که دو میزبان مجازی وجود دارد sandbox and secure با همان نام مستعار میزبان یعنی api.company.abc.com در یک محیط تعریف شده است:

میزبان‌های مجازی با نام مستعار یکسان

با تنظیمات فوق، دو سناریو می‌تواند وجود داشته باشد که در بخش‌های بعدی توضیح داده شده است.

سناریو ۱: یک API Proxy طوری پیکربندی شده است که فقط درخواست‌های ارسالی به یکی از میزبان‌های مجازی (sandbox) را بپذیرد.

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

در این سناریو، هنگامی که برنامه‌های کلاینت با استفاده از نام مستعار میزبان api.company.abc.com ، فراخوانی‌هایی را به API Proxy خاص انجام می‌دهند، به طور متناوب خطاهای ۴۰۴ با پیام زیر دریافت می‌کنند:

Unable to identify proxy for host: secure 

دلیل این امر این است که روتر درخواست‌ها را هم به میزبان‌های مجازی sandbox و هم به میزبان‌های مجازی secure ارسال می‌کند. هنگامی که درخواست‌ها به میزبان مجازی sandbox هدایت می‌شوند، برنامه‌های کلاینت پاسخ موفقیت‌آمیزی دریافت می‌کنند. با این حال، هنگامی که درخواست‌ها به میزبان مجازی secure هدایت می‌شوند، برنامه‌های کلاینت خطای ۴۰۴ دریافت می‌کنند زیرا API Proxy برای پذیرش درخواست‌ها در میزبان مجازی secure پیکربندی نشده است.

سناریو ۲: یک API Proxy پیکربندی شده است تا درخواست‌ها را هم به میزبان‌های مجازی (sandbox) و هم به میزبان‌های امن (secure) بپذیرد.

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

در این سناریو، هنگامی که برنامه‌های کلاینت با استفاده از نام مستعار میزبان api.company.abc.com ، فراخوانی‌هایی را به API Proxy خاص انجام می‌دهند، بر اساس منطق پروکسی، پاسخ معتبری دریافت خواهند کرد.

با این حال، این باعث می‌شود داده‌های نادرست در Analytics ذخیره شوند، زیرا درخواست‌های API به هر دو میزبان مجازی هدایت می‌شوند، در حالی که هدف اصلی ارسال درخواست‌ها فقط به یک میزبان مجازی بوده است.

این همچنین می‌تواند بر اطلاعات ثبت وقایع و هرگونه داده دیگری که مبتنی بر میزبان‌های مجازی است، تأثیر بگذارد.

تأثیر

  1. خطاهای ۴۰۴ به این دلیل رخ می‌دهند که درخواست‌های API ممکن است به یک میزبان مجازی هدایت شوند که ممکن است پروکسی API برای پذیرش درخواست‌ها در آن پیکربندی نشده باشد.
  2. داده‌های تحلیلی نادرست هستند، زیرا درخواست‌های API به تمام میزبان‌های مجازی با نام مستعار میزبان یکسان هدایت می‌شوند، در حالی که درخواست‌ها فقط برای یک میزبان مجازی خاص ارسال شده‌اند.

بهترین روش

  • چندین میزبان مجازی با نام مستعار میزبان و شماره پورت یکسان در یک محیط یا محیط‌های مختلف یک سازمان تعریف نکنید.
  • اگر نیاز به تعریف چندین میزبان مجازی دارید، در هر یک از میزبان‌های مجازی از نام‌های مستعار میزبان مختلف استفاده کنید، همانطور که در زیر نشان داده شده است:

    دو میزبان مجازی

مطالعه بیشتر