كيفية تكوين Nginx كوكيل عكسي: دليل خطوة بخطوة
المقدمة
يعتبر Nginx واحدًا من أكثر خوادم الويب والوكلاء العكسيين شعبية في العالم، ويشتهر بأدائه العالي وقابليته للتوسع ومرونته. غالبًا ما يُستخدم كوكيل عكسي لتحويل الطلبات من العملاء إلى الخوادم الخلفية، مما يتيح فوائد متعددة مثل توزيع الحمل، والأمان، والتخزين المؤقت، والمزيد.
الوكيل العكسي هو خادم يجلس بين أجهزة العملاء (مثل المتصفحات) والخوادم الخلفية (مثل خوادم الويب أو خوادم التطبيقات). عندما يقوم العملاء بإجراء طلبات، يقوم الوكيل العكسي بتحويل تلك الطلبات إلى الخادم الخلفي المناسب، ثم يرسل استجابة الخادم مرة أخرى إلى العميل. تتيح هذه الطريقة التحكم المركزي في حركة المرور، بالإضافة إلى تحسين الأمان والأداء.
في هذا الدليل، سنرشدك خلال الخطوات المطلوبة لتكوين Nginx كوكيل عكسي، بما في ذلك التثبيت، والتكوين الأساسي، وإعداد SSL، وتوزيع الحمل. سواء كنت تقوم بنشر تطبيق ويب بسيط أو تدير بنية تحتية معقدة للخوادم، يمكن أن يكون Nginx أداة قوية لتحسين كل من أمان وكفاءة نظامك.
بنهاية هذا الدليل، ستفهم كيفية:
- إعداد وكيل عكسي أساسي باستخدام Nginx.
- تكوين SSL للتواصل الآمن.
- استخدام Nginx لتوزيع الحمل عبر عدة خوادم خلفية.

ما هو الوكيل العكسي؟
الوكيل العكسي هو خادم يجلس بين أجهزة العملاء والخوادم الخلفية، يقوم بتحويل طلبات العملاء إلى الخوادم الخلفية المناسبة وإرجاع الاستجابة إلى العميل. بشكل أساسي، يعمل الوكيل العكسي كوسيط، حيث يستقبل طلبات العملاء نيابة عن الخادم الخلفي وينقلها إلى الخادم، الذي يعالجها ويعيد النتيجة.
على عكس الوكيل الأمامي، الذي يقوم بتحويل الطلبات من العملاء إلى الإنترنت، يقوم الوكيل العكسي بالعكس: يتعامل مع الطلبات القادمة من العملاء ويرسلها إلى الخادم الخلفي الصحيح. هذه التفرقة مهمة، حيث يحمي الوكيل العكسي الخوادم الخلفية من التعرض المباشر للإنترنت، مما يعزز الأمان والخصوصية.
الفرق بين الوكيل الأمامي والوكيل العكسي
الميزة | الوكيل الأمامي | الوكيل العكسي |
---|---|---|
الغرض الأساسي | ينقل طلبات العملاء إلى الإنترنت. | ينقل طلبات العملاء إلى الخوادم الخلفية. |
الموقع | بين العميل والإنترنت. | بين العميل والخادم (الخوادم) الخلفية. |
الرؤية | يعرف العملاء عن الوكيل الأمامي. | عادةً لا يعرف العملاء عن الوكيل العكسي. |
حالات الاستخدام الشائعة | تصفية الويب، تجاوز القيود الجغرافية، إخفاء الهوية. | توزيع الحمل، الأمان، التخزين المؤقت، إنهاء SSL. |
حالات الاستخدام للوكيل العكسي
يمكن أن يوفر الوكيل العكسي مجموعة واسعة من الفوائد لبنيتك التحتية، مثل:
-
توزيع الحمل: يوزع حركة المرور الواردة عبر عدة خوادم خلفية لتحسين الأداء والموثوقية وقابلية التوسع. يساعد ذلك في ضمان عدم تعرض خادم واحد للضغط بسبب الطلبات.
-
الأمان: يخفي هوية وبنية خوادمك الخلفية، مما يحميها من التعرض المباشر للإنترنت. يمكن أن يوفر الوكيل العكسي أيضًا طبقات إضافية من الأمان، مثل جدران الحماية لتطبيقات الويب أو التحكم في الوصول.
-
التخزين المؤقت: يخزن الاستجابات من الخوادم الخلفية، مما يقلل من الحمل على الموارد الخلفية ويسرع أوقات الاستجابة للمحتوى المطلوب بشكل متكرر.
-
إنهاء SSL: يتعامل مع تشفير وفك تشفير طبقة المقابس الآمنة (SSL) نيابة عن الخوادم الخلفية. يبسط ذلك إدارة شهادات SSL ويخفف الحمل الحسابي عن الخوادم الخلفية.
-
الضغط والتحسين: يضغط الاستجابات قبل إرسالها إلى العملاء، مما يقلل من استخدام النطاق الترددي ويحسن أوقات التحميل.
-
تسليم المحتوى: يمكن استخدامه لتسليم المحتوى من عدة خوادم خلفية، مما يوفر واجهة متسقة للعميل بينما يدير موارد الخادم المختلفة في الخلفية.
المتطلبات المسبقة
قبل أن تبدأ في تكوين Nginx كوكيل عكسي، هناك بعض المتطلبات المسبقة التي تحتاج إلى توافرها. تشمل هذه المعرفة الأساسية بـ Nginx، والوصول إلى خادم، والبرامج اللازمة المثبتة. ستوجهك هذه القسم خلال ما تحتاجه للبدء.
1. معرفة أساسية بـ Nginx
لتكوين Nginx كوكيل عكسي، يجب أن يكون لديك فهم أساسي لكيفية عمل Nginx، بما في ذلك ملفات التكوين الخاصة به وبنيته. إذا كنت غير مألوف بـ Nginx، يمكنك إلقاء نظرة على وثائق Nginx الرسمية لفهم أعمق للبرنامج.
يستخدم Nginx ملفات التكوين، التي تقع عادةً في /etc/nginx/
(على أنظمة Linux)، لتعريف إعدادات الخادم. ملف التكوين الرئيسي هو nginx.conf
، وقد يتم تضمين ملفات تكوين إضافية حسب إعدادك (على سبيل المثال، في /etc/nginx/sites-available/
و /etc/nginx/sites-enabled/
للتوزيعات المعتمدة على Debian).
2. تثبيت Nginx على خادمك
ستحتاج إلى تثبيت Nginx على خادمك. فيما يلي تعليمات التثبيت للتوزيعات الشائعة من Linux.
تثبيت Nginx على Ubuntu/Debian
لتثبيت Nginx على أنظمة Ubuntu أو Debian، استخدم الأوامر التالية:
sudo apt update
sudo apt install nginx
بعد التثبيت، يمكنك التحقق مما إذا كان Nginx يعمل باستخدام:
sudo systemctl status nginx
إذا لم يكن Nginx يعمل، يمكنك بدء تشغيله باستخدام:
sudo systemctl start nginx
تثبيت Nginx على CentOS/RHEL
على أنظمة CentOS أو RHEL، استخدم الأوامر التالية:
sudo yum install epel-release
sudo yum install nginx
ابدأ Nginx:
sudo systemctl start nginx
التحقق من تثبيت Nginx
بمجرد تثبيت Nginx، تحقق من أنه يعمل عن طريق فتح متصفح الويب والتنقل إلى عنوان IP الخاص بخادمك (على سبيل المثال، http://your_server_ip
). يجب أن ترى صفحة الترحيب الخاصة بـ Nginx.
بدلاً من ذلك، يمكنك الاختبار من سطر الأوامر عن طريق تشغيل:
curl http://localhost
يجب أن ترى محتوى صفحة HTML الافتراضية لـ Nginx.
3. خادم خلفي (اختياري للاختبار)
بينما يمكن تكوين Nginx كوكيل عكسي لأنواع مختلفة من الخوادم الخلفية (مثل تطبيقات الويب، وخوادم API، إلخ)، سنستخدم في هذا الدليل خادمًا خلفيًا بسيطًا للاختبار. يمكنك استخدام تطبيق ويب يعمل على منفذ محدد، مثل تطبيق Node.js أو Python Flask، أو يمكنك إعداد خادم HTTP بسيط.
على سبيل المثال، يمكنك تثبيت خادم HTTP بسيط باستخدام python3
لاختبار إعداد الوكيل العكسي:
# بدء خادم HTTP بسيط على المنفذ 8080
python3 -m http.server 8080
سيبدأ هذا خادمًا أساسيًا على http://localhost:8080
. يمكنك استخدام هذا كخادم خلفي لاختبار تكوين الوكيل العكسي.
4. الوصول إلى سطر الأوامر
ستحتاج إلى الوصول إلى سطر الأوامر على خادمك، إما من خلال محطة أو عبر SSH (إذا كنت تعمل على خادم بعيد). تأكد من أن لديك الأذونات اللازمة لتثبيت البرامج وتعديل ملفات التكوين على الخادم.
للوصول إلى خادم بعيد عبر SSH، استخدم:
ssh user@your_server_ip
تأكد من استبدال user
باسم المستخدم الفعلي الخاص بك وyour_server_ip
بعنوان IP الخاص بخادمك.
5. محرر نصوص
ستحتاج إلى محرر نصوص لتعديل ملفات التكوين. على معظم أنظمة Linux، يمكنك استخدام محررات مثل nano
أو vim
أو vi
. على سبيل المثال:
sudo nano /etc/nginx/nginx.conf
الخطوة 1: تثبيت Nginx
قبل أن تتمكن من تكوين Nginx كوكيل عكسي، تحتاج إلى تثبيت Nginx على خادمك. ستختلف عملية التثبيت حسب نظام التشغيل الخاص بك. في هذا القسم، سنغطي الخطوات لتثبيت Nginx على أنظمة Ubuntu/Debian وCentOS/RHEL.
تثبيت Nginx على Ubuntu/Debian
إذا كنت تستخدم نظامًا معتمدًا على Ubuntu أو Debian، يمكنك تثبيت Nginx باتباع هذه الخطوات البسيطة:
-
تحديث قائمة الحزم
قبل تثبيت أي برنامج جديد، من الجيد تحديث قائمة الحزم لضمان حصولك على أحدث إصدار من Nginx.sudo apt update
-
تثبيت Nginx
قم بتثبيت Nginx باستخدام مدير الحزمapt
.sudo apt install nginx
-
بدء Nginx
بعد اكتمال التثبيت، يمكنك بدء خدمة Nginx باستخدامsystemctl
:sudo systemctl start nginx
-
تمكين Nginx ليبدأ عند الإقلاع
لضمان بدء Nginx تلقائيًا عند إعادة تشغيل الخادم، قم بتمكينه للعمل عند الإقلاع:sudo systemctl enable nginx
-
التحقق من حالة Nginx
تحقق من أن Nginx يعمل بشكل صحيح عن طريق التحقق من حالته:sudo systemctl status nginx
يجب أن ترى مخرجات تشير إلى أن Nginx نشط ويعمل.
التحقق من تثبيت Nginx (Ubuntu/Debian)
بمجرد تثبيت Nginx وتشغيله، يمكنك التحقق من أنه يعمل عن طريق فتح متصفح الويب وإدخال عنوان IP الخاص بخادمك. يجب أن ترى صفحة الترحيب الافتراضية لـ Nginx، مما يؤكد أن Nginx يعمل بشكل صحيح.
بدلاً من ذلك، يمكنك استخدام curl
للاختبار:
curl http://localhost
يجب أن تتلقى محتوى HTML من صفحة Nginx الافتراضية.
تثبيت Nginx على CentOS/RHEL
بالنسبة لأنظمة CentOS أو RHEL أو Fedora، يمكنك تثبيت Nginx باستخدام الخطوات التالية:
-
تثبيت مستودع EPEL
أولاً، تحتاج إلى تمكين مستودع EPEL (الحزم الإضافية لنظام Linux المؤسسي)، الذي يحتوي على Nginx وحزم مفيدة أخرى.sudo yum install epel-release
-
تثبيت Nginx
قم بتثبيت Nginx باستخدام مدير الحزمyum
:sudo yum install nginx
-
بدء Nginx
بمجرد التثبيت، ابدأ خدمة Nginx:sudo systemctl start nginx
-
تمكين Nginx ليبدأ عند الإقلاع
لجعل Nginx يبدأ تلقائيًا بعد إعادة التشغيل، استخدم الأمر التالي:sudo systemctl enable nginx
-
التحقق من حالة Nginx
تحقق من حالة Nginx للتأكد من أنه يعمل:sudo systemctl status nginx
يجب أن ترى مخرجات تشير إلى أن Nginx نشط ويعمل.
التحقق من تثبيت Nginx (CentOS/RHEL)
تمامًا كما هو الحال في Ubuntu/Debian، يمكنك اختبار ما إذا كان Nginx يعمل عن طريق التنقل إلى عنوان IP الخاص بخادمك في متصفح. يجب أن ترى صفحة الترحيب الافتراضية لـ Nginx.
بدلاً من ذلك، استخدم curl
للتحقق:
curl http://localhost
يجب أن تحصل على محتوى HTML من صفحة Nginx الافتراضية.
الأسئلة الشائعة (FAQ)
ما الفرق بين الوكيل العكسي والوكيل الأمامي؟
الوكيل العكسي يجلس بين أجهزة العملاء والخوادم الخلفية، يقوم بتحويل طلبات العملاء إلى الخوادم المناسبة ثم إرجاع الاستجابات إلى العملاء. العميل لا يعرف عن الوكيل العكسي، حيث يعمل كبوابة للخادم (الخوادم) الخلفية.
الوكيل الأمامي، من ناحية أخرى، يجلس بين العميل والإنترنت. يُستخدم لتصفية أو التحكم في طلبات العملاء (مثل إخفاء الهوية أو قيود الوصول)، ويكون العملاء على علم بوجود الوكيل.
لماذا يجب أن أستخدم Nginx كوكيل عكسي؟
Nginx هو خادم ويب خفيف الوزن وعالي الأداء ووكيل عكسي يُستخدم على نطاق واسع بسبب قابليته للتوسع وميزاته الأمنية وسهولة تكوينه. يمكنه التعامل مع العديد من الاتصالات المتزامنة بكفاءة ويوفر ميزات مثل:
- توزيع الحمل: يوزع حركة المرور عبر عدة خوادم خلفية.
- التخزين المؤقت: يقلل من الحمل على الخوادم الخلفية عن طريق تخزين الاستجابات.
- إنهاء SSL: يتعامل مع تشفير وفك تشفير SSL لتخفيف هذا العمل عن الخوادم الخلفية.
- الأمان: يحمي الخوادم الخلفية من التعرض المباشر للإنترنت.
كيف يمكنني معرفة ما إذا كانت تكوينات الوكيل العكسي تعمل؟
يمكنك التحقق من إعداد الوكيل العكسي بعدة طرق:
-
تحقق من السجلات: عادةً ما تكون سجلات Nginx موجودة في
/var/log/nginx/access.log
و/var/log/nginx/error.log
. يمكن أن تساعدك هذه السجلات في تحديد أي مشاكل.tail -f /var/log/nginx/access.log tail -f /var/log/nginx/error.log
-
تحقق مما إذا كان Nginx يقوم بتحويل الطلبات: استخدم
curl
أو متصفحك للوصول إلى الوكيل العكسي وتحقق مما إذا كان يقوم بتحويل الطلبات بشكل صحيح إلى الخادم الخلفي.curl http://your_domain_or_ip
-
اختبر الخادم الخلفي مباشرة: الوصول إلى عنوان IP ومنفذ الخادم الخلفي مباشرة للتأكد من أنه يستجيب بشكل صحيح (على سبيل المثال،
http://localhost:8080
).
كيف يمكنني تمكين SSL لوكيل العكسي الخاص بي؟
لتمكين SSL لوكيلك العكسي، يمكنك استخدام Let's Encrypt مع Certbot للحصول على شهادات SSL مجانية. إليك نظرة عامة موجزة على العملية:
-
تثبيت Certbot وملحق Nginx (على Ubuntu/Debian):
sudo apt install certbot python3-certbot-nginx
-
الحصول على شهادة SSL باستخدام Certbot:
sudo certbot --nginx -d your_domain.com
اتبع التعليمات لإكمال عملية توليد الشهادة.
-
تكوين Nginx لاستخدام SSL:
سيقوم Nginx بإنشاء تكوين SSL تلقائيًا، ولكن يمكنك تحريره حسب الحاجة. سيكون تكوين SSL الأساسي كما يلي:
server { listen 443 ssl; server_name your_domain.com; ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:8080; 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; } } server { listen 80; server_name your_domain.com; return 301 https://$host$request_uri; }
-
تحقق من SSL: بعد تكوين Nginx مع SSL، يمكنك التحقق مما إذا كانت شهادة SSL تعمل عن طريق زيارة
https://your_domain.com
أو استخدام أدوات عبر الإنترنت مثل اختبار SSL Labs.
كيف يمكنني تكوين توزيع الحمل باستخدام Nginx؟
لتكوين توزيع الحمل، يسمح لك Nginx بتعريف كتلة upstream لتوزيع حركة المرور على عدة خوادم خلفية. إليك مثال أساسي:
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
location / {
proxy_pass http://backend;
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;
}
}
سيقوم هذا التكوين بتوزيع الطلبات بين خادمين خلفيين يعملان على localhost:8080
وlocalhost:8081
.
إعداد الوكيل العكسي الخاص بي لا يقوم بتحويل الطلبات. ماذا يجب أن أفعل؟
إليك بعض خطوات استكشاف الأخطاء وإصلاحها التي يمكنك اتباعها:
-
تحقق من بناء جملة تكوين Nginx: قبل إعادة تشغيل Nginx، تحقق من بناء جملة ملف التكوين:
sudo nginx -t
إذا كانت هناك أخطاء، سيقوم Nginx بإخراجها، ويمكنك إصلاحها وفقًا لذلك.
-
تحقق من إعدادات جدار الحماية: تأكد من أن جدار الحماية الخاص بك يسمح بحركة المرور على المنافذ الصحيحة (مثل المنفذ 80 لـ HTTP والمنفذ 443 لـ HTTPS). استخدم أدوات مثل
ufw
أوfirewalld
للتحقق من القواعد وضبطها. -
تحقق من سجلات Nginx: تعتبر سجلات Nginx أفضل مكان للبحث عن الأخطاء المتعلقة بالتحويل:
tail -f /var/log/nginx/error.log
يمكن أن تعطيك هذه فكرة عما إذا كان Nginx يواجه مشاكل عند محاولة تحويل الطلبات.
كيف يمكنني تكوين Nginx للتعامل مع اتصالات WebSocket؟
تتطلب اتصالات WebSocket معالجة خاصة لأنها تستخدم اتصالًا دائمًا. في تكوين Nginx الخاص بك، أضف الرؤوس التالية لضمان أن اتصالات WebSocket يتم تحويلها بشكل صحيح:
location /ws/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
سيسمح هذا التكوين لـ Nginx بالتعامل بشكل صحيح مع اتصالات WebSocket إلى الخادم الخلفي على localhost:8080
.
كيف يمكنني تحسين Nginx لأداء أفضل؟
إليك بعض نصائح تحسين الأداء لـ Nginx:
-
تمكين ضغط gzip: قم بضغط الملفات الثابتة لتقليل استخدام النطاق الترددي وتسريع أوقات تحميل الصفحة.
gzip on; gzip_types text/plain text/css application/javascript application/json;
-
التخزين المؤقت: استخدم التخزين المؤقت لتقليل الحمل على الخوادم الخلفية للمحتوى المطلوب بشكل متكرر.
location /images/ { proxy_cache my_cache; proxy_cache_valid 200 1d; }
-
أوقات انتهاء الاتصال: قم بتعيين أوقات انتهاء مناسبة لتجنب الانتظار غير الضروري للاتصالات البطيئة أو الخاملة.
proxy_read_timeout 90; proxy_connect_timeout 90;
-
عمليات العمل: زيادة عدد عمليات العمل لتحسين قدرة Nginx على التعامل مع المزيد من الاتصالات المتزامنة. يمكنك ضبط ذلك في
nginx.conf
:worker_processes auto;
كيف يمكنني حماية خوادمي الخلفية خلف Nginx؟
لزيادة أمان خوادمك الخلفية، يمكنك:
-
استخدام المصادقة HTTP: حماية الوصول إلى خادمك الخلفي باستخدام اسم مستخدم وكلمة مرور بسيطة.
location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; }
-
تقييد الوصول حسب IP: تقييد الوصول إلى خادمك الخلفي عن طريق السماح فقط لعناوين IP محددة.
location / { allow 192.168.1.0/24; deny all; }
-
استخدام جدران حماية تطبيقات الويب (WAF): النظر في إعداد WAF مثل ModSecurity لتوفير حماية إضافية ضد الهجمات.