ذكري المظهر

إعداد وكيل nginx العكسي

Create flask app & configure nginx - Deploy Flask application on EC2 p.4

Create flask app & configure nginx - Deploy Flask application on EC2 p.4

جدول المحتويات:

Anonim

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

بسبب أدائها وقابليتها للتوسعة ، غالبًا ما يتم استخدام NGINX كوكيل عكسي لخوادم HTTP وغير HTTP. تكوين الوكيل العكسي النموذجي هو وضع Nginx أمام تطبيقات Node.js أو Python أو Java.

يمنحك استخدام Nginx كبديل عكسي العديد من المزايا الإضافية:

  • Load Balancing - يمكن لـ Nginx إجراء موازنة تحميل لتوزيع طلبات العملاء عبر الخوادم الوكيلة ، مما يعمل على تحسين الأداء وإمكانية التوسع والموثوقية. التخزين المؤقت - باستخدام Nginx كوكيل عكسي ، يمكنك تخزين نسخ الصفحات المعروضة مسبقًا لتسريع أوقات تحميل الصفحة. إنه يعمل عن طريق تخزين المحتوى الذي تم استلامه من استجابات الخوادم الوكيلة مؤقتًا واستخدامه للرد على العملاء دون الحاجة إلى الاتصال بالخادم الوكيل للحصول على نفس المحتوى في كل مرة. SSL Termination - يمكن أن يعمل Nginx كنقطة نهاية SSL للاتصالات مع العملاء. سيقوم بمعالجة وفك تشفير اتصالات SSL الواردة وتشفير استجابات الخادم الوكيل. الضغط - إذا لم يرسل الخادم الوكيل الاستجابات المضغوطة ، يمكنك تكوين Nginx لضغط الاستجابات قبل إرسالها إلى العملاء. تخفيف هجمات هجمات DDoS - يمكنك قصر الطلبات الواردة وعدد الاتصالات لكل عنوان IP فردي على قيمة عادية للمستخدمين العاديين. يسمح لك Nginx أيضًا بحظر أو تقييد الوصول استنادًا إلى موقع العميل وقيمة رؤوس الطلبات مثل "User-Agent" و "Referer".

توضح هذه المقالة الخطوات المطلوبة لتكوين Nginx كبديل عكسي.

المتطلبات الأساسية

نحن نفترض أن لديك Nginx مثبتًا على خادم Ubuntu أو CentOS أو Debian.

باستخدام Nginx كوكيل عكسي

لتكوين Nginx كوكيل عكسي لخادم HTTP ، افتح ملف تكوين كتلة خادم المجال وحدد موقعًا وخادمًا وكيلًا بداخله:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

يتم تعيين عنوان URL للخادم proxy_pass باستخدام توجيه proxy_pass ويمكنه استخدام HTTP أو HTTPS كبروتوكول أو اسم مجال أو عنوان IP ومنفذ اختياري و URI كعنوان.

يطلب التكوين أعلاه من Nginx تمرير جميع الطلبات إلى موقع /app إلى الخادم الوكيل على http://127.0.0.1:8080 .

على توزيعات Ubuntu و Debian ، يتم تخزين ملفات كتلة الخادم في الدليل /etc/nginx/sites-available ، بينما في CentOS في دليل /etc/nginx/conf.d .

لتوضيح كيفية عمل توجيهات location و proxy_pass بشكل أفضل ، دعنا نأخذ المثال التالي:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

إذا قام زائر بالوصول إلى http://example.com/blog/my-post ، فسوف يقوم Nginx بإرسال هذا الطلب إلى http://node1.com:8000/wordpress/my-post .

عندما يحتوي عنوان الخادم الوكيل على URI ، ( /wordpress/ ) ، يتم استبدال URI للطلب الذي تم تمريره إلى الخادم الوكيل بواسطة URI المحدد في التوجيه. إذا تم تحديد عنوان الخادم الوكيل دون URI ، يتم تمرير URI للطلب الكامل إلى الخادم الوكيل.

تمرير طلب رؤوس

عندما يقوم Nginx بتقديم طلب ، فإنه يقوم تلقائيًا بتعريف حقلين للرأس في الطلبات التي تم إرسالها من العميل Host Connection ويزيل الرؤوس الفارغة. يتم تعيين Host إلى متغير $proxy_host ، ويتم تعيين Connection للإغلاق.

لضبط أو ضبط رؤوس الاتصالات التي يتم الاتصال بها ، استخدم توجيه proxy_set_header ، متبوعًا بقيمة الرأس. يمكنك العثور على قائمة بجميع رؤوس الطلبات المتاحة والقيم المسموح بها هنا. إذا كنت ترغب في منع مرور الرأس إلى الخادم الوكيل ، فاضبطه على سلسلة فارغة "" .

في المثال التالي ، نقوم بتغيير قيمة حقل رأس Host إلى $host وإزالة حقل رأس Accept-Encoding عن طريق تعيين قيمته إلى سلسلة فارغة.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

كلما قمت بتعديل ملف التكوين ، يجب عليك إعادة تشغيل خدمة Nginx لتصبح التغييرات نافذة المفعول.

تكوين Nginx كبروكسي عكسي إلى خادم بروكسي بخلاف HTTP

لتكوين Nginx كبديل عكسي لخادم بروكسي بخلاف HTTP ، يمكنك استخدام التوجيهات التالية:

  • fastcgi_pass - الوكيل العكسي لخادم FastCGI. uwsgi_pass - الوكيل العكسي لخادم uwsgi. scgi_pass - الوكيل العكسي scgi_pass . memcached_pass - الوكيل العكسي لخادم Memcached.

أحد الأمثلة الأكثر شيوعًا هو استخدام Nginx كبديل عكسي لـ PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

خيارات وكيل عكس Nginx الشائعة

أصبح تقديم المحتوى عبر HTTPS معيارًا في الوقت الحاضر. في هذا القسم ، سنقدم لك مثالًا لتهيئة الوكيل العكسي HTTPS Nginx بما في ذلك المعلمات ورؤوس وكيل Nginx الموصى بها.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 - يحدد إصدار بروتوكول proxy_http_version 1.1 افتراضيًا إلى 1.0. بالنسبة إلى Websockets واتصالات keepalive ، يلزمك استخدام الإصدار 1.1. proxy_cache_bypass $http_upgrade - يحدد الشروط التي بموجبها لن تؤخذ الاستجابة من ذاكرة التخزين المؤقت. Upgrade $http_upgrade Connection "upgrade" - حقول الحقول هذه مطلوبة إذا كان التطبيق الخاص بك يستخدم Websockets. Host $host - يحتوي متغير $host بترتيب الأسبقية التالي على: اسم المضيف من سطر الطلب أو اسم المضيف من حقل رأس طلب Host أو اسم الخادم المطابق لطلب. X-Real-IP $remote_addr - X-Real-IP $remote_addr توجيه عنوان IP الخاص بالزائر الحقيقي إلى الخادم الوكيل. X-Forwarded-For $proxy_add_x_forwarded_for - قائمة تحتوي على عناوين IP لكل خادم تم توكيل العميل من خلاله. X-Forwarded-Proto $scheme - عند استخدامه داخل كتلة خادم HTTPS ، تتم إعادة كتابة كل استجابة HTTP من الخادم الوكيل إلى X-Forwarded-Host $host - يحدد المضيف الأصلي الذي طلبه العميل. X-Forwarded-Port $server_port - يحدد المنفذ الأصلي الذي طلبه العميل.

استنتاج

لقد تعلمت كيفية استخدام Nginx كوكيل عكسي. لقد أوضحنا لك أيضًا كيفية تمرير معلمات إضافية إلى الخادم وتعديل وتعيين حقول رأس مختلفة في الطلبات التي يتم تقديمها.

إنجن إكس