درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
در Apigee Edge، یک «مسیریاب» همه ترافیک ورودی میانای برنامهسازی کاربردی را مدیریت میکند. این یعنی همه درخواستهای HTTP و HTTPS به پراکسی Edge API ابتدا توسط Edge Router مدیریت میشوند. بنابراین، درخواست کارگزار API باید به نشانی IP و درگاه باز در «مسیریاب» هدایت شود.
میزبان مجازی به شما امکان میدهد چندین نام دامنه را در یک سرور یا گروه سرور میزبانی کنید. برای Edge، سرورها با «مسیریابهای Edge» مطابقت دارند. با تعریف میزبانهای مجازی در «مسیریاب»، میتوانید درخواستهای مربوط به چندین دامنه را مدیریت کنید.
میزبان مجازی در Edge پروتکلی (HTTP یا HTTPS) را بههمراه درگاه «مسیریاب» و نام مستعار میزبان تعریف میکند. نام مستعار میزبان معمولاً نام دامنه ساناد است که به نشانی IP «مسیریاب» تخصیص داده میشود.
برای مثال، تصویر زیر «مسیریابی» را با دو تعریف میزبان مجازی نشان میدهد:
در این مثال، دو تعریف میزبان مجازی وجود دارد. یکی درخواستهای HTTPS را در دامنه domainName1 مدیریت میکند، دیگری درخواستهای HTTP را در domainName2 مدیریت میکند.
در درخواست به پراکسی API، «مسیریاب» سرایند «میزبان» و شماره درگاه درخواست ورودی را با فهرست نامهای مستعار میزبان تعریفشده توسط همه میزبانهای مجازی مقایسه میکند تا تعیین کند کدام میزبان مجازی درخواست را مدیریت میکند.
پیکربندی نمونه برای میزبانهای مجازی در زیر نشان داده شده است:
الگوی بد
تعریف چندین میزبان مجازی با نام مستعار میزبان و شماره درگاه یکسان در محیطهای یکسان/متفاوت یک سازمان یا در سازمانهای مختلف باعث سردرگمی در زمان مسیریابی درخواستهای API میشود و ممکن است باعث بروز خطاها/رفتارهای غیرمنتظره شود.
بیایید از یک مثال برای توضیح پیامدهای داشتن چندین میزبان مجازی با نام مستعار میزبان یکسان استفاده کنیم.
فرض کنید دو میزبان مجازی sandbox and secure تعریفشده
با نام مستعار میزبان یکسان وجود دارد، یعنی api.company.abc.com در محیط:
با تنظیمات بالا، دو سناریو ممکن است رخ دهد که در بخشهای زیر توضیح داده شده است.
سناریو ۱: «پراکسی API» پیکربندی شده است تا درخواستها را فقط برای یکی از میزبانهای مجازی sandbox بپذیرد
<ProxyEndpoint name="default">
...
<HTTPProxyConnection>
<BasePath>/demo</BasePath>
<VirtualHost>sandbox</VirtualHost>
</HTTPProxyConnection>
...
</ProxyEndpoint>در این سناریو، وقتی برنامههای مشتری بااستفاده از نام مستعار میزبان api.company.abc.com با «پراکسی میانای برنامهسازی کاربردی» خاصی تماس میگیرند، بهطور متناوب خطاهای ۴۰۴ با این پیام دریافت میکنند:
Unable to identify proxy for host: secure
دلیل آن این است که «مسیریاب» درخواستها را به هر دو میزبان مجازی sandbox و secure
ارسال میکند. وقتی درخواستها به میزبان مجازی sandbox هدایت میشوند، برنامههای مشتری
پاسخ موفقیتآمیزی دریافت خواهند کرد. بااینحال، وقتی درخواستها به میزبان مجازی secure هدایت میشوند،
برنامههای کارخواه خطای ۴۰۴ دریافت میکنند زیرا «پراکسی API» برای پذیرفتن درخواستها در
میزبان مجازی secure پیکربندی نشده است.
سناریو ۲: «پراکسی API» پیکربندی شده است تا درخواستهای هر دو میزبان مجازی sandbox و secure را بپذیرد
<ProxyEndpoint name="default">
...
<HTTPProxyConnection>
<BasePath>/demo</BasePath>
<VirtualHost>sandbox</VirtualHost>
<VirtualHost>secure</VirtualHost>
</HTTPProxyConnection>
...
</ProxyEndpoint>در این سناریو، وقتی برنامههای مشتری بااستفاده از نام مستعار میزبان api.company.abc.com با «پراکسی میانای برنامهسازی کاربردی» خاصی تماس میگیرند، براساس منطق پراکسی پاسخ معتبری دریافت میکنند.
بااینحال، این کار باعث میشود دادههای نادرستی در Analytics ذخیره شود زیرا درخواستهای API به هر دو میزبان مجازی هدایت میشوند، درحالیکه درخواستهای واقعی باید فقط به یک میزبان مجازی ارسال میشدند.
این کار میتواند بر اطلاعات گزارش و هر داده دیگری که براساس میزبانهای مجازی است نیز تأثیر بگذارد.
تأثیر
- خطاهای ۴۰۴ زیرا درخواستهای API ممکن است به میزبان مجازیای هدایت شوند که «پراکسی API» برای پذیرفتن درخواستها در آن پیکربندی نشده است.
- دادههای Analytics نادرست است زیرا درخواستهای میانای برنامهسازی کاربردی به همه میزبانهای مجازی دارای نام مستعار میزبان یکسان هدایت میشود، درحالیکه درخواستها فقط برای یک میزبان مجازی خاص ایجاد شده است.
روال مطلوب
- چندین میزبان مجازی را با نام مستعار میزبان و شماره درگاه یکسان در یک محیط، یا محیطهای مختلف یک سازمان تعریف نکنید.
اگر نیاز به تعریف چندین میزبان مجازی وجود دارد، از نامهای مستعار میزبان مختلف در هریک از میزبانهای مجازی استفاده کنید، همانطور که در زیر نشان داده شده است:
