تتضمن مشكلتك في استخدام NGINX كخادم وكبديل مسبق للطلبات (Reverse Proxy) توجيه طلبات متعددة لعدة API على منافذ مختلفة تحت موقع واحد. تريد تشغيل جميع هذه الAPIs تحت موقع واحد هو localhost:443/api/. هذا يشمل API العملاء على خادمين مختلفين، وهو ما يعقد الأمور بالنسبة لك.
للتعامل مع هذا السيناريو، يمكنك تعديل إعدادات NGINX لتحقيق الهدف المطلوب. السبيل الذي اقترحه هو استخدام تعبيرات العنوان (regex) في موقع المكان لتطابق الطلبات بشكل ديناميكي. إليك كيف يمكنك تعديل إعدادات NGINX الخاصة بك:
nginxserver { listen 443; server_name localhost; location ~ ^/api/orders { proxy_pass https://localhost:500; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } location ~ ^/api/customers/(?
\d+)/billing { proxy_pass https://localhost:400/api/customers/$id/billing; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } location ~ ^/api/customers { proxy_pass https://localhost:300; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } }
في هذا التكوين، تستخدم تعبيرات العنوان لتحديد المواقع التي تخص كل API. بدلاً من تحديد مسارات محددة مثل /api/orders أو /api/customers/$id/billing، يمكنك استخدام ^ للبداية و$ للنهاية مع تعبيرات العنوان للتأكد من أن المسارات تطابق بالضبط.
على سبيل المثال، الموقع ~ ^/api/orders سيتطابق مع أي مسار يبدأ بـ /api/orders ولكن لا يوجد لديه قيد للنهاية، مما يعني أنه سيتطابق مع كل ما بعد /api/orders بغض النظر عن ما يكون.
أما بالنسبة لـ /api/customers/(?
باستخدام هذا التكوين، يجب أن تكون قادرًا على تحقيق ما تريد، وهو توجيه الطلبات لجميع الـ APIs المذكورة تحت موقع واحد وهو localhost:443/api/.
المزيد من المعلومات
بالطبع، دعني أواصل تطوير المقال لمساعدتك في فهم هذا العملية بشكل أفضل وتنفيذها بنجاح.
بعد تعديل إعدادات NGINX كما سبق، يجب أن تكون قادرًا الآن على توجيه جميع الطلبات المتعلقة بالـ APIs المختلفة تحت الموقع الواحد localhost:443/api/. دعنا نلقي نظرة عميقة على التعديلات التي أجريناها وكيف تؤثر على سير العمل:
-
مطابقة المواقع باستخدام تعبيرات العنوان (Regex Matching):
استخدمنا تعبيرات العنوان لتحديد المواقع التي يجب أن تتم مطابقتها لكل API. هذا يسمح لنا بالتعامل مع مسارات الطلبات بشكل ديناميكي بدلاً من تحديد مسارات ثابتة. -
توجيه الطلبات إلى المنافذ الصحيحة:
بعد تحديد المواقع المناسبة لكل API، استخدمناproxy_pass
لتوجيه الطلبات إلى المنافذ الصحيحة لكل API. على سبيل المثال، توجيه الطلبات المتعلقة بـ orders إلى المنفذ 500، والطلبات المتعلقة بـ customers إلى المنفذ 300، والطلبات المتعلقة بـ billing إلى المنفذ 400. -
تعيين رؤوس الطلبات الخاصة:
استخدمناproxy_set_header
لتعيين رؤوس الطلبات بشكل صحيح. هذا مهم للحفاظ على سلامة الطلبات والردود أثناء التوجيه.
بعد تطبيق هذه التعديلات، يجب أن يعمل NGINX بشكل صحيح لتوجيه الطلبات لجميع الـ APIs المختلفة تحت موقع واحد. لا تنسى إعادة تشغيل NGINX بعد تعديل إعداداته لتأكيد تطبيق التغييرات.
إذا واجهت أي مشكلة أو كان لديك أي استفسار إضافي، فلا تتردد في طرحه هنا أو في المنتديات ذات الصلة. سنكون سعداء بمساعدتك في الوصول إلى الحل الأمثل.