it-swarm.dev

ما فوائد استخدام Nginx أمام خادم الويب لـ Go؟

أكتب بعض خدمات الويب التي تعرض بيانات JSON ، والتي تحتوي على الكثير من المستخدمين.

ما فوائد استخدام Nginx أمام الخادم الخاص بي مقارنة باستخدام خادم go http؟

75
Daniele B

هذا يعتمد.

من خارج الصندوق ، وضع nginx في المقدمة كبديل عكسي سيعطيك:

  • سجلات الوصول
  • سجلات الأخطاء
  • من السهل SSL إنهاء
  • دعم SPDY
  • دعم gzip
  • طرق سهلة لتعيين رؤوس HTTP لمسارات معينة في سطرين
  • عرض الأصول الثابتة سريعًا جدًا (إذا كنت تقدم خدمة S3/وما إلى ذلك ، فليس هذا مناسبًا)

خادم Go HTTP جيد جدًا ، لكن ستحتاج إلى إعادة اختراع العجلة للقيام ببعض هذه الأشياء (وهو أمر جيد: ليس من المفترض أن تكون كل شيء للجميع).

لقد وجدت دائمًا أنه من الأسهل وضع nginx في المقدمة - وهو ما هو جيد في - والسماح له بعمل أشياء "خادم الويب". تطبيق My Go يقوم بأشياء التطبيق ، وفقط الحد الأدنى من الرؤوس/إلخ. أنه يحتاج إلى. لا تنظر إلى وضع nginx في المقدمة كشيء "سيء".

124
elithrar

خادم HTTP القياسي لـ Go جيد. إذا كان طلبك/غالبًا/طلبات/استجابات "ديناميكية" ، فهذا هو أفضل طريقة حقًا.

يمكنك استخدام nginx لخدمة الأصول الثابتة ، ولكن على الأرجح ، فإن تطبيق Go one هو الأفضل لذلك أيضًا. إذا كنت بحاجة إلى أداء أعلى ، فعليك فقط استخدام CDN أو ذاكرة التخزين المؤقت قدر الإمكان مع Varnish (على سبيل المثال).

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

17
Ask Bjørn Hansen

تمنحك مجموعة أدوات Gorilla على شبكة الإنترنت :

  • التوجيه المتقدم (تقييد المجال/النطاق الفرعي ، مطابقة مسار regex).
  • دعم gzip (عبر معالجات البرامج الوسيطة .)
  • تسجيل معالج الوسيط الذي يخرج في تنسيق السجل المشترك اباتشي.
  • تأمين ملفات تعريف الارتباط المشفرة.
  • الدورات.
  • تقوم الحزمة schema بتحويل قيم النموذج إلى بنية.

هذا يملأ فجوة كبيرة بين خوادم Go net/http وخوادم HTTP مثل NGINX.

أنا شخصياً أتجنب تثبيت خادم HTTP آخر وتكوينه أعلى net/http إذا علمت أنه يمكنني توصيل CDN بدلاً من ذلك.

أعتقد أن net/http لديه أقوى خادم HTTP في أي مكتبة قياسية.

5
Moshe Revah

من https://blog.gopheracademy.com/caddy-a-look-inside/ يبدو أن Go يمكنها معالجة gzip والأخطاء والملفات الثابتة ، التوجيه ورؤوس المتشعب باستخدام الوسيطة. يوضح السطر أدناه ، من المدونة ، كيف ستتعامل مع هذا الطلب.

logHandler(gzipHandler(fileServer))

يتعاملون مع تسجيل الأخطاء بطريقة مثيرة للاهتمام حقًا. طالما تقوم الوسيطة بإرجاع رمز خطأ (int) ، فإن الوسيطة التي تتعامل مع الأخطاء تتعامل معها تلقائيًا. لقد ذهبوا إلى أبعد من تكوين الموقع بأكمله في Go مثل Nginx. "كان ملف nginx.conf لجميع مواقع أكاديمية Gopher يتجاوز طوله 115 سطرًا. Caddyfile المكافئ هو 50 سطرًا فقط."

2
Kevin K