You are on page 1of 11

‫‪Nginx‬‬

‫االداء‬
‫الضغط‬
‫تقوم الوحدة ‪ ngx_http_gzip_module‬بمهمة المصفى التي تضغط الردود باستخدام ‪ gzip‬وهذا يساعد‬
‫على تقليل حجم البيانات المنقولة إلى النصف أو أكثر‪.‬‬
‫الموجه ‪ gzip‬يستخدم لتفعيل ‪ on‬أو تعطيل ‪ off‬الضغط‪.‬‬
‫الموجه ‪ gzip_types‬يحدد االنواع ‪ mime.types‬التي سيتم ضغطها‪ .‬ويمكن استخدام الرمز * ليعني كل‬
‫انواع محتوى الردود‪.‬‬
‫الموجه ‪ gzip_proxied‬يحدد الضغط للردود للطلبات الموكلة (‪ )proxied‬بناء على الطلب والرد‪ .‬عندما‬
‫يكون ‪ nginx‬نفسه هو الوكيل‪.‬‬
‫الموجه ‪ gzip_vary‬يفعل ‪ on‬أو يعطل ‪ off‬ادخل حقل الراس ‪ Vary: Accept-Encoding‬إذا كان‬
‫الموجهات ‪ gzip‬فعالة‪.‬‬
‫مثال‬
‫‪gzip‬‬ ‫;‪on‬‬
‫;‪gzip_min_length 1000‬‬
‫;‪gzip_proxied expired no-cache no-store private auth‬‬
‫‪gzip_types‬‬ ‫;‪text/plain application/xml‬‬
‫يمكن اختبار اعدادات الضغط بارسال طلب كالتالي‬
‫‪curl -H "Accept-Encoding: gzip" -I https://davidwalsh.name‬‬
‫وتبحث عن الحقل ‪Content-Encoding: gzip‬‬

‫الملفات الثابتة‬

‫|‪location ~* \.(json|gif|jpg|jpeg|png|bmp|ico|ttf|woff|otf|eot|txt|pdf|css|js|wmv|avi|mpg|mpeg‬‬
‫{ ‪mp4|amr|mp3|ogg|wav|wma|m3u|mid|ram|rm|rmvb|rar|psd|swf|doc|xls|exe|zip||bz2|tar.bz2)$‬‬
‫;‪root /data/web/webroot3/web‬‬
‫;‪expires 2y‬‬
‫}‬

‫التخزين المؤقت (‪)cache‬‬


‫يدعم ‪ nginx‬التخزين المؤقت لرد ‪ HTTP‬القادم من المنبع (‪ )upstream‬سواء كان المحتوى ثابت‬
‫(‪ )static‬أو متغير (‪.)dynamic‬‬
‫يقرر ‪ nginx‬تخزين الرد بناء على رأس ‪ Expires‬أو ‪ Cache-Control‬بالقيمة ‪ max-age‬القادم من الخادم‬
‫الخلفي‪ .‬ال يتم تخزين الردود التي بها ‪.Set-Cookie‬‬
‫يتم تخزين بيانات التخزين المؤقت في ملفات‪ .‬اسم الملف يكون ناتج دالة ‪ MD5‬لمفتاح التخزين‬
‫المؤقت (‪.)cache key‬‬
‫ال يتم حذف المحتوى المنتهي صالحيته (مثال كما يحدد رأس الرد ‪ )Cache-Control‬وانما يحذف‬
‫المحتوى الذي لم يتم الوصول له ‪ inactive‬فقط عند امتالء المساحة أو انخفاض المساحة المتاحة‬
‫بحسب ما تضبطه‪ .‬هذا يعني أن قد يمتلى المخزن المؤقت بالبيانات التي ال تُطلب كثيرا ولكن عند‬
‫تحقق شرط االمتالء ستبدأ عملية حذف هذه الملفات التي ال يتم الوصول لها‪.‬‬
‫تراقب عملية مدير التخزين المؤقت (‪ )cache manager‬حجم التخزين المؤقت االقصى المحدد‬
‫بالمعلم ‪ max_size‬و‪/‬أو أقل حجم للمساحة المتاحة المحددة بالمعلم ‪ .min_free‬عند تجاوز أي من‬
‫هذه المعلمات ستقوم العملية بحذف أقل البيانات المستخدمة مؤخرا‪.‬‬
‫افتراضيا يتم جلب وتخزين كامل المحتوى من الخادم الخلفي حتى في طلب ‪ byte-range‬من العميل‬
‫ثم خدمة المدى الذي يريده العميل من ذاكرة التخزين المؤقت‪ .‬ميزة ‪ slic‬والموجهات المتعلقة بها‬
‫تقطع الطلب المرسل للخادم الخلفي‪.‬‬
‫ال يوفر ‪ nginx‬ميزة حذف الكاش ‪ cache purging‬وهكذا يمكن أن يتم خدمة محتوى قديم من ذاكرة‬
‫التخزين المؤقتة إن لم يصبح منتهي الصالحية ‪ max-age‬ولم ينتهي وقت عدم الفاعلية ‪ .inactive‬الحل‬
‫في ارسال رد الخادم الخلفي بـ ‪ must-revalidate‬أو ‪ proxy-revalidate‬أو انتهاء سريع للصالحية يجبره‬
‫على إعادة التحقق ‪.revalidate‬‬
‫الموجه ‪ proxy_cache_path‬يضبط المسار واعدادات التخزين المؤقت‪ .‬يمكن أن يتواجد داخل كتلة‬
‫‪ http‬فقط‪.‬‬
‫• المعلم االول هو مسار دليل التخزين المؤقت‪.‬‬
‫• =‪ levels‬يحدد مستوى التسلسل الهرمي اسفل دليل التخزين المؤقت‪ .‬افتراضيا يتم تخزين‬
‫كل الملفات بدليل واحد فقط ما قد يؤدي إلى بطئ الوصول إلى الملفات عند زيادة عددهم‪.‬‬
‫وينصح به أن يكون ‪ 1:2‬أي مستويان للدالئل على االقل‪.‬‬
‫• ‪ use_temp_path=off‬القيم ‪ off‬لمنع استخدام مسار مختلف لتخزين الملف المؤقت الذي يتم‬
‫حفظ الرد به أوال قبل إعادة تسميته أو نقله إلى دليل التخزين المؤقت‪.‬‬
‫• =‪ keys_zone‬يضبط اسم وحجم منطقة الذاكرة المشتركة (‪)shared memory zone‬‬
‫المستخدمة في حفظ مفاتيح التخزين المؤقت وهذه تساعد على تحديد وجود مطابقة أم ال‬
‫بدون الحاجة للوصول إلى ملفات التخزين المؤقت على نظام الملفات‪ .‬الميجا بايت الواحدة‬
‫يمكنها تخزين ‪ 8000‬مفتاح‪ .‬القيمة تاخذ الشكل ‪ name:size‬مثل ‪.my_zone:10m‬‬
‫• =‪ inactive‬يحدد الوقت الذي إن مر على وجود بيانات مخزنة مؤقتا بدون أن يتم طلبها أو‬
‫الوصول إليها فسيتم حذف هذه البيانات بغض النظر عن حداثتها أو انتهاء صالحيتها‪ .‬افتراضيا‬
‫تكون ‪ 10‬دقائق‪.‬‬
‫• ‪ max_size‬يضبط الحد االقصى الجمالي مساحة دليل التخزين المؤقت‪ .‬افتراضيا ياخذ كل‬
‫المساحة المتاحة‪.‬‬
‫• ‪min_free‬‬
‫الموجه ‪ proxy_cache‬يفعل التخزين الموقت المحدد‪ .‬يمكن أن يتواجد في كتلة ‪ http‬و ‪ server‬و‬
‫‪ .location‬افتراضيا ياخذ القيمة ‪ .off‬وهكذا لتفعيله نحدد اسم منطقة (‪ )zone‬التخزين المؤقت‬
‫المعدة‪ .‬يمكن استخدام نفس المنطقة في اماكن عديدة‪.‬‬
‫الموجه ‪ proxy_cache_revalidate‬ياخذ القيمة ‪ off‬افتراضيا‪ .‬عند اعطائه القيمة ‪ on‬يجعل ‪ nginx‬يرسل‬
‫طلب ‪ GET‬وبه الرأس ‪ If-Modified‬عند طلب العميل لملف منتهي الصالحية بالمخزن المؤقت‬
‫ليسال الخادم الخلفي عن إن تم تعديل الملف منذ تخزينه مؤقتا يقوم بارساله وإال فال وبذلك يتم‬
‫توفير عرض النطاق (‪.)bandwidth‬‬
‫الموجه ‪ proxy_cache_use_stale‬يحدد الحاالت المسموح لخدمة الردود المخزنة مؤقتا خالل االتصال‬
‫بالخادم الخلفي‪ .‬القيمة ‪ updating‬تسمح باستخدام الرد القديم (‪ )stale‬إن كان يتم تحميل الرد الجديد‬
‫حاليا‪.‬‬
‫الموجه ‪ proxy_cache_background_update‬يسمح ببدء طلب فرعي بالخلفية لتحديث رد مخزن مؤقتا‬
‫منتهي الصالحية في نفس الوقت الذي يتم خدمة الرد القديم للعميل‪ .‬يجب تفعيل الموجه السابق‪.‬‬
‫الموجه ‪ proxy_cache_lock‬عند تفعيله بالقيمة ‪ on‬سيسمح لطلب واحد فقط أن يجلب المحتوى من‬
‫الخادم الخلفي وأي طلبات اخرى لنفس المحتوى ستنتظر ظهور الرد في المخزن المؤقت وتاخذه‬
‫منه‪ .‬مفيد لمنع هزيل الرعد‪.‬‬
‫الموجه ‪ proxy_cache_lock_timeout‬يضبط نفاذ الوقت للموجه السابق‪ .‬فعند تجاوزه سيتم تمرير‬
‫الطلب االخر المنتظر إلى الخادم الخلفي ولن يتم تخزين الرد‪ .‬افتراضيا يكون ‪ 5‬ثواني‪.‬‬
‫الموجه ‪ proxy_cache_lock_age‬يحدد عمر اكتمال الطلب االخير الممرر إلى الخادم الخلفي لملئ‬
‫ذاكرة التخزين المؤقت فسيتم ارسال طلب اخر إلى الخادم الخلفي‪ .‬افتراضيا يكون ‪ 5‬ثواني‪.‬‬
‫الموجه ‪ proxy_cache_bypass‬يعرف الشروط التي لن يتم خدمة الرد من ذاكرة التخزين المؤقت‪ .‬إن‬
‫وجدت قيمة واحدة من سلسلة المعلمات الممررة غير فارغة وال تساوي ‪ 0‬فلن يتم خدمة الرد من‬
‫الذاكرة‪ .‬وسيتم حفظ الرد إلى الذاكرة‪.‬‬
‫الموجه ‪ proxy_no_cache‬يتجاوز السلوك االفتراضي للموجه السابق وال يحفظ الرد إلى الذاكرة‪.‬‬
‫يمكن استخدام المتغير ‪ $upstream_cache_status‬الضافته إلى رأس رد مثل ‪ X-Cache-Status‬ليعرف‬
‫العميل هل هذا الرد قادم من الذاكرة المؤقتة ‪ HIT‬أم ال ‪.MISS‬‬
‫الموجه ‪ proxy_force_ranges‬على القيمة ‪ on‬يفعل دعم ‪ byte-range‬للردود المخزنة بالذاكرة المؤقتة‬
‫أو غير المخزنة من الخادم الخلفي بغض النظر عن رأس ‪ Accept-Ranges‬في الرد‪ .‬افتراضيا يكون‬
‫‪.off‬‬
‫يمكن تجاهل اي رأس يؤثر على التخزين المؤقت (أو اي راس عموما) بتحديد الراس للموجه‬
‫‪ .proxy_ignore_headers‬وهنا إن كان ‪ Cache-Control‬فيجب استخدام الموجه‬
‫;‪ proxy_cache_valid any 30m‬ليقوم بضبط مدة انتهاء الصالحية ويعوض وظيفة الرأس المتجاهل الن‬
‫‪ nginx‬لن يخزن أي رد بدون وقت انتهاء‪.‬‬

‫المراجع‬
‫‪/https://www.nginx.com/blog/nginx-caching-guide‬‬
‫‪/https://www.nginx.com/blog/smart-efficient-byte-range-caching-nginx‬‬

‫ال تستخدم ‪ Nginx‬كموازن حمل (‪ )Load Balancer‬أو كمخزن مؤقت الن ميزة مراقبة موازن الحمل‬
‫مدفوعة‪ .‬كذلك فإن ميزة حذف التخزين المؤقت ‪ cache purge‬مدفوعة‪.‬‬
‫يوجد لدى ‪ nginx‬موازنة حمل على الطبقة ‪ 4‬و ‪ 7‬والطبقة ‪ 4‬لكال من ‪.tcp/udp‬‬
‫يتفوق ‪ nginx‬في االداء وقدرته على التعامل مع االتصاالت المتزامنة الكثيرة بنفس الوقت‪ .‬كذلك‬
‫يتفوق في عمله كوكيل عكسي ‪ reverse proxy‬وموازن الحمل ‪ .load balancer‬صمم ‪ nginx‬بمعمارية‬
‫يقودها االحداث (‪ )events-driven‬وغير متزامنة‪ .‬يتفوق ‪ nginx‬في استخدامه الخفيف لموارد الخادوم‪.‬‬
‫ويتفوق في خدمة المحتوى الثابت‪.‬‬
‫ال يوجد لدي ‪ nginx‬اي قدرة على معالجة المحتوى الحركي‪/‬الديناميكي داخليا ليتعامل مع ‪ php‬وأي‬
‫طلبات اخرى للمحتوى الحركي يجب أن يُمرر الطلب إلى عملية خارجية للتنفيذ ثم ينتظر المحتوى‬
‫المقدم ليعود له ثم يُرسل الناتج إلى العميل‪.‬‬
‫ال يدعم ‪ nginx‬توزيع االعدادات وإنما كل إعدادات الخادوم تكون في دليل االعدادات الرئيسي‪ .‬أي ال‬
‫يدعم ‪.htaccess‬‬
‫معرف‬
‫محدد بنظام الملفات وبدال من ذلك يُحلل ‪ُ nginx‬‬
‫ال يوفر ‪ nginx‬آلية لضبط االعدادات لدليل ُ‬
‫المورد الموحد ‪ URI‬نفسه ويضبط االعدادات بناء على الطلب‪.‬‬
‫الوحدات في ‪ nginx‬ليست حركية‪/‬ديناميكي التحميل وإنما يجب أن يتم اختيار الوحدات وتجميعها‬
‫(‪ )compiled‬مع ‪ .nginx‬وعلي الرغم من ذلك تأتي حزمة ‪ nginx‬مجمعة مع اشهر الوحدات‪.‬‬
‫دليل ملفات اإلعدادات هو ‪ /etc/nginx/‬اهم الملفات والدالئل بداخله هي‪:‬‬
‫• ملف االعدادات الرئيسي ‪nginx.conf‬‬
‫• الدليل ‪ conf.d/‬لملفات االعدادات االضافية الخاصة بنا‪ .‬يتم تضمينها في كتلة ‪ http‬قبل كتلة‬
‫‪ server‬الخاصة بالخادوم االفتراضي في ملف االعدادات الرئيسي‪ .‬يجب أن تنتهي تلك المفات‬
‫بالالحقة ‪.conf‬‬
‫• الدليل ‪ default.d/‬لملفات اعدادات اضافية لكتلة الخادوم االفتراضي‪ .‬يتم تضمينها في كتلة‬
‫‪ server‬الخاصة بالخادوم االفتراضي بملف االعدادات الرئيسي‪ .‬يجب أن تنتهي تلك الملفات‬
‫بالالحقة ‪.conf‬‬
‫يحفظ ‪ nginx‬سجالته بالدليل ‪/var/log/nginx/‬‬
‫االمر ‪ nginx -t‬الختبار االعدادات‪.‬‬
‫التوثيق الرسمي‪ .‬دليل المتغيرات المضمنة‪.‬‬
‫الموجهات في ‪ ngnix‬تكون على شكل ;‪ key value1 value2‬حيث يفصل بين القيم بمسافة وينتهي‬
‫الموجه بفاصلة منقوطة‪ .‬الكتل تكون على شكل }{ ‪ key‬ويطلق عليها ايضا السياق (‪.)context‬‬
‫كُتل الخادوم (‪ )server blocks‬تشبه كتل المضيف الوهمي (‪ )virtual host‬في اباتشي‪ .‬نحتاج الموجه‬
‫‪ root‬وهو يحدد دليل وثائق الجذر للخادوم‪ ،‬الموجه ‪ server_name‬الذي يُحدد اسم الخادوم و االسماء‬
‫المستعارة لهذا الخادوم‪ ،‬الموجه ‪ errorlog‬لتحديد مسار سجالت االخطاء‪ ،‬الموجه ‪ access_log‬لتحديد‬
‫مسار سجالت الوصول ويفضل استخدام هيئة السجالت ‪main‬‬
‫الموجه ‪ root‬يضبط دليل الجذر للطلبات‪ .‬يستخدم داخل كتل ‪ http‬و ‪ server‬و ‪ location‬ليحدد الدليل‬
‫المطلوب على نظام الملفات‪.‬‬
‫الموجه ‪ listen‬يحدد عنوان أو اسم المضيف و‪/‬أو منفذ الذي سيقبل الخادوم الطلبات منه‪ .‬يكون مثل‬
‫‪ apache‬بالشكل ‪ ip:port‬والنجمة * تعني الجميع‪ .‬عناوين ‪ ipv6‬تُكتب داخل []‪ .‬لضبط المنفذ على‬
‫اتصاالت ‪ ssl‬يجب أن نمرر المعلم ‪ ssl‬والمعلم ‪.http2‬‬
‫الموجه ‪ ssl_certificate‬يحدد ملف الشهادة‪.‬‬
‫الموجه ‪ ssl_certificate_key‬يحدد ملف المفتاح الخاص‪.‬‬
‫الموجه ‪ index‬يحدد اسماء الملفات التي سيستخدمها ‪ nginx‬للبحث عن الصفحة الرئيسية للخادوم‬
‫وتُكتب بترتيب البحث الذي نريده‪ .‬افتراضيا يكون ‪ index.html‬فقط‪.‬‬
‫الموجه ‪ alias‬يعمل فقط داخل كتلة ‪ location‬حيث يُعرف استبدال لمعرف المورد المحدد ببداية كتلة‬
‫‪ location‬حيث يسمح للطلبات بالوصول إلى مسارات خارج جذر الوثائق أو داخله‪ .‬يمكن تحديد ملف‬
‫واحد لموقع معين باستخدام الموجه ‪.alias‬‬
‫معرف المورد الموحد (‪ )uri‬هو ما يأتي بعد عنوان الخادوم ومنفذه مثال ‪http://server.com/this/is_uri‬‬
‫حيث يُعرف شيء بدون تحديد موقعه بالضبط‪.‬‬
‫كتلة ‪ location‬تُحدد معرف المورد الموحد ‪ uri‬الذي سينطبق عليه االعدادات التي بداخل الكتلة‪ .‬كتلة‬
‫‪ location‬تأخذ الشكل } ‪ location [ = | ~ | ~* | ^~ ] uri { ...‬حيث يكون ‪ uri‬هو سلسلة نصية بادئة‬
‫معدل *~ لمطابقة التعبير بدون حساسية لحالة‬ ‫(‪ )prefix string‬تمثل تعبير نمطي ‪ regex‬يُحدد بال ُ‬
‫معدل = للمطابقة بالضبط حيث إن وجد‬ ‫معدل ~ للمطابقة بحساسية لحالة االحرف ال ُ‬ ‫االحرف وال ُ‬
‫معدل ~^ للمطابقة بدون تعبير نمطي‪.‬‬ ‫ُ‬ ‫ال‬ ‫البحث‬ ‫ينتهي‬ ‫بالضبط‬ ‫مطابقة‬
‫اليجاد مكان (‪ )location‬مطابق لطلب قادم يفحص ‪ nginx‬االماكن المعرفة باستخدام السالسل‬
‫النصية البادئة يتم اختيار وتذكر المكان الذي لديه اطول سلسلة بادئة مطابقة للطلب‪ .‬ثم يتم فحص‬
‫التعبيرات النمطية بترتيب ظهورهم في االعدادات ويتم ايقاف البحث عن ايجاد أول مطابقة‪ .‬إن لم‬
‫يتم ايجاد مطابقة لتعبير نمطي فسيتم استخدام المكان المحفوظ بالذاكرة سابقا‪.‬‬
‫الموجه ‪ expires‬يفعل أو يعطل اضافة أو تعديل حقول رأس الرد ‪ Expires‬و ‪ .Cache-Control‬افتراضيا‬
‫يكون معطل ‪ .off‬الوقت المحدد في حقل ‪ Expires‬سيكون مجموع الوقت الحالي والوقت المحدد‬
‫في هذا الموجه‪ .‬محتوى حقل ‪ Cache-Control‬يعتمد على إن كان الوقت سالب سيكون ‪no-cache‬‬
‫وإن كان الوقت موجب أو ‪ 0‬سيكون ‪ max-age=t‬حيث ‪ t‬هو الوقت المحدد بالثواني‪ .‬المعلم ‪max‬‬
‫يعني ‪ 10‬سنوات‪.‬‬
‫الموجه ;‪ error_page code uri‬يحدد ‪ uri‬الذي سيظهر للخطأ المحدد‪ .‬حيث هذا يسبب إعادة توجيه‬
‫معرف المورد المحدد‪ .‬وإن اردت يمكن كتابة كتلة ‪ location‬لتحدد بها اعدادات هذا‬
‫داخلي إلى ُ‬
‫المورد‪.‬‬
‫يجب ضبط الموجه ‪ try_files‬لكتلة ‪ /‬الرئيسية ويكون اخر معلم هو ملف التطبيق الرئيسي مثل‬
‫‪ index.php$is_args$args‬حيث ينظر في وجود الملفات الممرة كمعلمات اسفل جذر الوثائق بالترتيب‬
‫المحدد ويستخدم أول ملف يجده لمعالجة الطلب‪ .‬إذا لم يجد أي ملف من الملفات المحددة سيقوم‬
‫بإعادة توجيه داخلية إلى اخر معلم لـ ‪ try_files‬ويعالج هذا الطلب الجديد وكانه هو الطلب القادم من‬
‫المستخدم وهكذا فإن اخر معلم يعتبر هو المعلم الذي يفشل إليه ‪ nginx‬إن لم يجد الملف‬
‫المطلوب‪ .‬ويمكن استخدام التعبير ‪ =code‬لتحديد كود‪ .‬مثال ;‪ try_files file1.html $uri =404‬يبحث عن‬
‫الملف ‪ file1.html‬إن لم يجده يبحث عن وجود ملف باسم معرف المورد المحدد (‪ )uri‬المرسل في‬
‫الطلب إن لم يجده سينفذ كود الخطأ ‪ .404‬يمكن ايضا البحث عن وجود دليل حيث ينتهي بـ ‪ /‬ولكن‬
‫إن كان فهرس الدالئل ‪ auto_index‬معطل ‪-‬وهو كذلك افتراضيا‪ -‬سيؤدي ‪ $uri/‬إلى توقف الموقع النه‬
‫ال يمكن عرض فهرس الدالئل‪ .‬هذا الموجه هام جدا النه يعيد توجيه الطلب داخليا على ملف التطبيق‬
‫الرئيسي إن لم يجد الملفات أو الدالئل المحددة اسفل جذر الوثائق وبالتالي فإن تطبيق الويب‬
‫سيستلم الطلب ويعالجه بنفسه الن تطبيق الويب يكون لديه توجيه (‪ )routing‬داخلي يمكن أن يجد‬
‫مطابقة للطلب به فيخدمه بدون مشاكل‪.‬‬
‫الموجهات المطلوبة لضبط مضيفين وهميين آمنين موجودة بملف االعدادات الرئيسي‪.‬‬
‫الموجه ‪ server_tokens‬يضبط اضافة نسخة ‪ nginx‬إلى صفحات الخطأ وافتراضيا يكون مفعل ‪on‬‬
‫ولتعطيله نضبطه على ‪.off‬‬
‫الموجه ‪ return‬يأخذ الشكل ;]‪ return code [text‬يوقف المعالجة ويُعيد الشفرة (‪ )code‬المحددة إلى‬
‫العميل‪ .‬الشفرة الغير قياسية ‪ 444‬تُغلق االتصال بدون ارسال راس رد‪ .‬يمكن ارسال جسم الرد‬
‫‪ text‬الي شفرات اخرى‪ .‬يمكن استخدام رابط إعادة توجيه ‪ url‬لشفرة‪ .‬أو رابط ‪ url‬فقط بشكل‬
‫مباشر بدون شفرة‪ .‬وهي اسرع من ‪ .rewrite‬مثال‬
‫;‪return 301 https://$host$request_uri‬‬
‫الموجه ‪ rewrite‬ياخذ الشكل ;]‪ rewrite regex replacement [flag‬عندما يطابق ‪ uri‬تعبير تقليدي ‪regex‬‬
‫المحدد يتم تغيير ‪ uri‬إلى ال ‪ replacement‬المحدد‪ .‬إذا بدأ االستبدال ‪ replacement‬بـ ‪ http://‬أو ‪https://‬‬
‫أو ‪ $scheme‬يتم ايقاف المعالجة وارسال التحويل إلى العميل‪ .‬يتم تنفيذ هذا الموجه بالتسلسل واحد‬
‫تلو االخر ويمكن استخدام االعالم ‪ flags‬النهاء إي عملية معالجة الحقة‪ .‬االعالم مثل‪:‬‬
‫• ‪ last‬يوقف المعالجة الي موجه تابع للوحدة ‪ ngx_http_rewrite_module‬ويبدأ البحث عن موقع‬
‫(‪ )location‬جديد يطابق ال ‪ uri‬الجديد‪.‬‬
‫• ‪ Break‬يوقف معالجة الموجهات التابعة مثل الموجه ‪.break‬‬
‫• ‪ Redirect‬تُعيد تحويل مؤقت بشفرة ‪ 302‬يستخدم إذا لم تكن جملة االستبدال ‪replacement‬‬
‫هي ‪ //:http‬أو …‬
‫• ‪ permanaent‬يعيد توجيه دائم بالشفرة ‪.301‬‬
‫الموجه ‪ add_header‬يُضيف حقل إلى راس الرد‪ .‬مثال‬
‫;‪add_header X-Backend-Server $hostname‬‬
‫إن تم تعريف هذا الموجه داخل أي كتلة فرعية مثل كتلة ‪ location‬أو ‪ server‬سيلغي هذا أي تعريف‬
‫الي راس بهذا الموجه في الكتل الرئيسية للمستوى االعلى ‪.http‬‬
‫الموجه ‪ worker_processes‬يحدد عدد عمليات ‪ nginx‬وحيدة الخيط (‪ )single-threaded‬المفتوحة بأي‬
‫وقت‪ .‬القيمة ‪ auto‬تعني عملية لكل نواة معالج ‪.cpu core‬‬
‫الموجه ‪ worker_connections‬يحدد عدد االتصاالت المسموحة في نفس الوقت للعملية الواحدة‪.‬‬
‫وهكذا لحساب الحد األقصى للعمالء الممكن خدمتهم بنفس الوقت نضرب عدد االتصاالت في عدد‬
‫العمليات‪.‬‬
‫الموجه ‪ fastcgi_param‬يضبط المعلمات التي ينبغي تمريرها إلى خادم ‪ .FastCGI‬حيث يتم تحديد‬
‫الملعم والقيمة‪ .‬هناك ملف ‪ fastcgi_param‬يمكن تضمينه به كل المعلمات المطلوبة لخادم ‪.FastCGI‬‬
‫هذه المعلمات يتم تمريرها للتطبيق وياخذ بناء عليها التطبيق قرارات‪.‬‬

‫المتغيرات‬
‫المتغيرات تبدأ بـ ‪ $‬مثل المتغير الذي يعبر عن معرف المورد الخاص بالكتلة الحالية ‪$uri‬‬
‫• ‪ $request_uri‬معرف المورد الموجد الخاص بالطلب كامال‪.‬‬
proxy_pass ‫ هو العنوان المرر إلى الموجه‬$proxy_host ‫المتغير‬ •
‫ اسم المضيف من سطر الطلب أو‬:‫ هو احد الثالثة اشياء التالية طبقا لالسبقية‬$host ‫المتغير‬ •
‫ لذلك هذا المتغير‬.‫ من راس طلب العميل أو اسم الخادوم الذي يُطابق الطلب‬Host ‫حقل‬
$proxy_host ‫أفضل من‬
https ‫ او‬http ‫ هو ميثاق الطلب االصلي هل كان‬$scheme ‫المتغير‬ •
‫ مهم لكي تتمكن خواديم المنبع من صنع قرارات أو‬.‫ عنوان العميل‬$remote_addr ‫المتغير‬ •
.‫سجالت بناء على عنوان العميل‬
? ‫ المعلمات في الرابط تاتي بعد‬.‫ الوسطاء الممرة في سطر الطلب‬$args •
‫ إن كان سطر الطلب به وسطاء سيتم وضع ? مكان هذا المتغير بخالف ذلك سيتم‬$is_args •
.‫ادخال سلسلة نصية فارغة‬
‫ ومعرف المورد‬alias ‫ أو‬root ‫ مسار الملف للطلب الحالي بناء على موجه‬$request_filename •
.URI ‫الموحد‬

‫مثال على ملف اعدادات موقع‬


server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nextcloud.orkiservers.com www.nextcloud.orkiservers.com;
root /home/nextcloud/public_html;
index index.php;

ssl_certificate /etc/letsencrypt/live/nextcloud.orkiservers.com/fullchain.pem; # managed by


Certbot
ssl_certificate_key /etc/letsencrypt/live/nextcloud.orkiservers.com/privkey.pem; # managed by
Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

#ssl_session_cache shared:SSL:1m;
#ssl_session_timeout 10m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#ssl_prefer_server_ciphers on;

location / {
try_files $uri $uri/ index.php$is_args$args;
}

location ~ \.php$ {
try_files $uri =404;
‫;‪fastcgi_pass unix:/var/run/php81-php-fpm/socket.sock‬‬
‫;‪fastcgi_index index.php‬‬
‫;‪fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name‬‬
‫;‪include fastcgi_params‬‬
‫}‬
‫}‬

‫االمر ‪nginx‬‬
‫الخيارات‪:‬‬
‫• ‪ -T‬يعرض كل إعدادات ‪ nginx‬المفعلة والتعليقات‪.‬‬

‫ضبط ‪ nginx‬مع ‪php‬‬


‫‪ Fastcgi‬هو ميثاق ثنائي للتواصل بين البرامج التفاعلية وخادوم ويب وهو يختلف عن ‪ CGI‬في تقليل‬
‫تكاليف التواصل بين البرامج التفاعلية وخادوم الويب بحيث يسمح للخادوم بالتعامل مع مزيد من‬
‫الطلبات بالمرة الواحدة‪ .‬تدعمه ‪ php‬عبر الحزمة ‪ php-fpm‬التي تُقدم مدير عمليات ‪ FastCGI‬وهو‬
‫تطبيق ‪ php‬لميثاق ‪ fastcgi‬مع ميزات اضافية مفيدة بالغالب للمواقع ذات الحمل العالي‪.‬‬
‫ملف ‪ /etc/php.ini‬هو ملف تهيئة ‪ php‬الذي تقرأه عندما تبدأ‪ .‬يحتوى االعداد ‪ cgi.fix_pathinfo‬الذي‬
‫مفعل افتراضيا وهو يجعل ‪ php‬تحاول تنفيذ اقرب ملف تجده إذا لم تجد الملف المطلوب‬ ‫يكون ُ‬
‫بالضبط وهذا غير امن النه قد يسمح للمستخدمين بنفيذ اسكربتات ‪ php‬غير مسموح لهم تنفيذها‪.‬‬
‫ملف اعدادات ضبط ‪ php-fpm‬االساسي هو ‪ /etc/php-fpm.conf‬والذي يمتد ليشمل الملفات التي‬
‫تنتهي بالالحقة‬
‫‪ .conf‬بالدليل ‪ /etc/php-fpm.d/‬وافتراضيا يكون بداخل هذا الدليل ملف حوض العمليات االفتراضي‬
‫‪ .www‬حوض ‪ php-fpm‬هو عملية لينكس عادية تعمل بمستخدم ومجموعة محددة وتُنصت إلى مقبس‬
‫يونكس محدد‪.‬‬
‫االن علينا ان نضبط ‪ php-fpm‬مدير عمليات ‪ FastCGI‬بالمسار ‪ /etc/php-fpm.d/www.conf‬نجد موجه‬
‫‪ listen‬الذي يحدد العناوين التي سيقبل مدير العمليات طلبات ‪ FastCGI‬منها‪ .‬سنجعله يستمع إلى‬
‫ملف مقبس يونكس‬
‫‪ /var/run/php-fpm/php-fpm.sock‬الن االستماع إلى ‪ ip:port‬يستهلك جزء من موارد الخادوم ثم نضبط‬
‫المستخدم والمجموعة المالكة لملف المقبس بالموجهين ‪ listen.owner = nginx‬و = ‪listen.group‬‬
‫‪ nginx‬ثم نضبط المستخدم والمجموعة المالكة للعمليات بالموجهين ‪ user = nginx‬والمجموعة ‪group‬‬
‫‪.= nginx‬‬
‫ثم نبدأ ونفعل خدمة ‪.php-fpm‬‬
‫نحتاج ان نضيف ‪ index.php‬كأول معلم في الموجه ‪index‬‬
‫نحتاج اضافة الكتلة التالية لكي يُرسل ‪ nginx‬الطلبات إلى ‪php‬‬
‫{ ‪location ~ \.php$‬‬
‫;‪try_files $uri =404‬‬
‫;‪fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock‬‬
‫;‪fastcgi_index index.php‬‬
‫;‪fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name‬‬
‫;‪include fastcgi_params‬‬
‫}‬
‫تأكد أن الدالئل داخل الدليل ‪ /var/lib/php‬المجموعة المالكة هي ‪.nginx‬‬
‫عند تثبيت حزم جديدة كإضافات إلى ‪ php‬يجب اعادة تشغيل ‪ php-fpm‬ليتم تطبيق التغييرات‪.‬‬

‫ضبط ‪ php-fpm‬لعزل عمليات كل مضيف علي حدة‬


‫إن كان لديك بالخادوم عدة مضيفين عليك عزل عملية ‪ php‬لكل مضيف وهمي (كتلة خادوم)‬
‫وتشغيلها بمستخدم ومجموعة مختلفة بذلك تضمن عدم وصول المستخدمين إلى عمليات ‪php‬‬
‫الخاصة بمستخدمين اخرين وإن حدث خرق باحد المضيفين تبقي عمليات المضيفين االخرين في‬
‫امان‪..‬‬
‫لتحقيق ذلك انشأ لكل مضيف حوض ‪ php-fpm‬مثل الحوض االفتراضي ‪ www‬مع تغيير الموجه ‪ user‬و‬
‫‪ group‬ليناسب المستخدم الذي يُدير المضيف الوهمي وتحديد ملف مقبس يونكس لهذا المضيف‬
‫ويجب أن يكون ‪ nginx‬لديه صالحية الكتابة على هذا المقبس بتحديد ‪ listen.owner‬و ‪ .listen.group‬ثم‬
‫في ‪ nginx‬تحديد هذا الملف بإعدادات المضيف بالموجه ‪fastcgi_pass unix:/‬‬

‫حد الوصول‬
‫ال يستخدم ‪ nginx‬ملفات ‪ .htaccess‬الن لها تاثير كبير على االداء بسب حاجة خادوم الويب لقراءة كل‬
‫دليل في الرابط المطلوب لكي يطبق قواعد ‪ .htaccess‬إن وجدها بأي دليل‪.‬‬
‫يمكن تطبيق حد الوصول على مستوى الخادوم كله ‪ http‬أو الخادوم الوهمي ‪ server‬أو الطلب‬
‫‪location‬‬

‫على المستخدمين‬
‫الموجه ‪ auth_basic‬الذي يُحدد الكلمة التي نريد عرضها‪ .‬الموجه ‪ auth_basic_user_file‬يحدد الملف‬
‫الذي به حسابات المستخدمين بالشكل ‪ user:pass‬ويجب أن تكون كلمة السر معماة‪ .‬استخدم االداة‬
‫‪ htpasswd‬لتوليد هذا الملف وإلضافة المستخدمين حيث تقوم بتعمية كلمة السر تلقائيا‪.‬‬
‫اجعل ملف كلمات السر مخفي واضبط تصريح الملف على ‪ 600‬واعطي ‪ nginx‬تصريح القراءة‬
‫فقط‪.‬‬

‫على المضيفين‬
‫الموجه ‪ allow‬يسمح للعناوين المحدد بالوصول العناوين قد تكون عنوان ‪ IP‬أو شبكة كاملة بصيغة‬
‫‪ CIDR‬أو الكلمة المفتاحية ‪ all‬لتعني الجميع‪ .‬عكسه الموجه ‪ .deny‬يفحص ‪ nginx‬القواعد بالتسلسل‬
‫حتى يجد أول مطابقة للطلب‪.‬‬

‫الوكيل العكسى ‪reverse proxy‬‬


‫خادوم وكيل (‪ )proxy server‬هو وسيط بين العمالء والخواديم االخرى يُسهل الوصول إلى محتوى‬
‫الشبكة العالمية ‪ www‬حيث يوفر اخفاء الهوية وقد يُستخدم لتجاوز حظر ‪.IP‬‬
‫الوكيل العكسي (‪ )reverse proxy‬هو وسيط بين الخادوم االصلي والعميل الذي ال يعلم شيء عن‬
‫الخادوم االصلي‪.‬‬
‫استخداماته‪:‬‬
‫• يمكنه توزيع الحمل (الطلبات) على عدة خواديم‪ .‬وهذا يسمح بإضافة مزيد من الخواديم‬
‫(التوسع الخارجي) أو إزالتهم للصيانة من البنية التحتية بسهولة‪.‬‬
‫• تخفيف الحمل عن الخادوم االصلي من خالل التخزين المؤقت للمحتوى الثابت والمتغير‬
‫وبالتالي تخفيف الكثير من الطلبات‪.‬‬
‫• يمكن أن يستخدم لتنفيذ تشفير ‪ ssl‬بدال من الخادوم االصلي‪.‬‬
‫• كجدار ناري يحمي الخادوم االصلي من هجمات الويب مثل ‪ DOS‬و ‪ DDOS‬وبدونه فإن حذف‬
‫البرمجيات الخبيثة يصبح اصعب‪.‬‬
‫يختلف عن ‪ NAT‬بانه يعمل في طبقة التطبيقات (الطبقة السابعة في نموذج ‪ )OSI‬أما ‪ NAT‬يعمل‬
‫صمم‬
‫في الطبقة الثالثة طبقة الشبكة ‪ .IP‬عمل ‪ NAT‬على طبقة منخفظة يجعله مالئم الي ميثاق‪ُ .‬‬
‫صمم لزيادة االداء‪ ،‬المراجعة‪ ،‬االمن بتمثيله كنقطة‬
‫‪ NAT‬لمعالجة عناوين ‪ IP‬اما الوكيل العكسي ُ‬
‫اختناق‪.‬‬

‫ضبط ‪ nginx‬كوكيل عكسي‬


‫الموجه ‪ proxy_pass‬يحدد ميثاق وعنوان الخادوم االخر الذي سيمرر الطلب إليه ويعمل فقط داخل‬
‫كتلة ‪ .location‬يمكن تحديد نطاق أو عنوان ‪ IP‬ومنفذ‪ .‬وإذا تم تحديد ‪ URI‬في العنوان سيتم استبدال‬
‫‪ URI‬الطلب بالـ ‪ URI‬المحدد في هذا الموجه‪ .‬لتمرير الطلب إلى خادوم ليس ‪ HTTP‬نستبدل ‪proxy‬‬
‫بالموجه السابق بالكلمة المناسبة‬
‫( ‪.) fastcgi – uwsgi – scgi – memcached‬‬
‫يمكن ضبط كتلة خادوم بداخلها موجه اسماء الخواديم ونحدد كتلة ‪ location‬بداخلها ‪ proxy_pass‬بذلك‬
‫نوجه أي طلب لالسماء المحددة إلى الخادوم المحدد في ‪.proxy_pass‬‬
‫ممرر إلى‬‫الموجه ‪ proxy_set_header‬يمكننا من إعادة تعريف أو الحاق حقول إلى رأس الطلب ال ُ‬
‫خواديم المنبع‪ .‬يعمل هذا الموجه في كتلة ‪ http‬والخادوم و ‪ location‬ياخذ هذا الموجه اسم الحقل ثم‬
‫معرفين وهم الحقل ‪ host‬الذي ياخذ القيمة ‪$proxy_host‬‬ ‫القيمة‪ .‬افتراضيا يكون هناك حقلين فقط ُ‬
‫مرسل‬‫والحقل ‪ connection‬الذي ياخذ القيمة ‪ close‬وأي حقل راس فارغ يحذفه ‪ nginx‬من الراس ال ُ‬
‫إلى خواديم المنبع‪.‬‬
‫حقل الراس ‪ X-Forwarded-for‬يحتوي قائمة تبدأ بعناون العميل ثم كل عناوين الوكالء التي مر طلب‬
‫العميل من خاللهم‪ .‬والمتغير ‪ $proxy_add_xforwarded_for‬يضيف إلى تلك القائمة عنوان الخادوم‬
‫الوكيل الحالي‪.‬‬
‫مثال‪:‬‬
‫{ ‪location /‬‬
‫;‪proxy_set_header HOST $host‬‬
‫;‪proxy_set_header X-Forwarded-Proto $scheme‬‬
‫;‪proxy_set_header X-Real-IP $remote_addr‬‬
‫;‪proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for‬‬
‫;‪proxy_pass http://example.com‬‬
‫}‬
‫يمكن استخدام كتلة ‪ upstream‬داخل كتلة ‪ http‬لتعريف حوض من الخواديم التي سيوزع ‪nginx‬‬
‫الحمل (الطلبات) عليهم‪ .‬حيث نحدد اسم الحوض ثم داخل كتلة ‪ upstream‬نحدد كل خادوم بالموجه‬
‫‪ .server‬ثم نمرر اسم الحوض إلى الموجه ‪.proxy_pass‬‬
‫افترضيا يتم توزيع الحمل بالتساوي بناء على طريقة التوزيع حيث يكون وزن كل خادوم ‪ 1‬ولتغيير‬
‫الوزن يمكن تمرير المعلم ‪ weight=num‬إلى الموجه ‪ server‬لتحديد وزن الخادوم مثال ‪ 3‬لكي نقول ان‬
‫هذا الخادوم ياخذ ‪ 3‬اضعاف الطلبات التي تاخذها الخواديم االخرى‪.‬‬
‫توزيع الحمل هي‪:‬‬ ‫طرق‬
‫‪ round-robin‬توزع الطلبات على الخواديم بطريقة دائرية حيث تُعطي الخادوم االول طلب ثم‬ ‫•‬
‫التالي الطالب الثاني وهكذا حتى نهاية حوض الخواديم ثم بدأ مرة اخرى مع الخادوم االول‪.‬‬
‫هذه هي الطريقة االفتراضية‪.‬‬
‫‪ least-connected‬الطلب التالي يُسنند إلى الخادوم الذي لديه اقل عدد من االتصاالت النشطة‪.‬‬ ‫•‬
‫‪ ip-hash‬يتم إسناد الطلب إلى الخادوم بناء على عنوان ‪ IP‬العميل‪ .‬وهذا مفيد لثبات الجلسة‪.‬‬ ‫•‬
‫كل طريقة تُحدد كموجه داخل كتلة ‪ .upstream‬مثل الموجه ‪ least_conn‬أو ‪ip_hash‬‬
‫تمكننا العوازل ‪ buffers‬من تحرير خواديم المنبع من انتظار تسليم الطلب للعميل ومساعدتها على‬
‫التعامل مع عدد اكبر من الطلبات‪ .‬بدون العوازل ‪ buffers‬سيتم ارسال البيانات من خواديم المنبع‬
‫والبدء فورا في نقلها إلى العميل‪ .‬ولكن في الغالب العمالء ذو سرعات مختلفة لذلك افترضيا يكون‬
‫العازل مفعل حيث سيحفظ خادوم ‪ nginx‬رد خادوم المنبع مؤقتا ثم يُرسل هذه البيانات إلى العميل‬
‫إذا كان اتصال العميل بطئ فإن هذا يسمح لـ ‪ nginx‬ان يُغلق االتصال بخادوم المنبع سريعا ثم يمكنه‬
‫بعد ذلك أن يُرسل البيانات إلى العميل بأي شكل ممكن‪.‬‬
‫يمكن ضبط ميزة العازل ‪ buffer‬بالموجه ‪ proxy_buffering‬وهي مضبوطة افترضيا على ‪ .on‬الموجه‬
‫‪ proxy_buffers‬يُحدد عدد العوازل وحجم العازل الواحد افترضيا يكون ‪ 8‬عوازل حجم العازل مساوى‬
‫لصفحة ذاكرة إما ‪4‬كيلو أو ‪ 8‬كيلو‪ .‬الموجه ‪ proxy_buffer_size‬يحدد حجم الراس بالرد وهو يحفظ‬
‫في عازل منفصل وهو يكون افتراضيا نفس حجم العازل بالموجه ‪ proxy_buffers‬ويمكن تقليله الن‬
‫الراس اصغر‪ .‬هذه الموجهات يمكن ضبطها في كتلة ‪ http‬و ‪ server‬و ‪location‬‬
‫يوفر ‪ nginx‬طريقة لتخزين المحتوى مؤقتا من خواديم المنبع وبذلك يقضي على الحاجة لالتصال‬
‫بخواديم المنبع لكل االتصاالت‪.‬‬
‫يمكن اغالق السجالت مثل ;‪access_log off‬‬

‫معدل الحد (‪)Rate Limiting‬‬


‫تستخدم الوحدة ‪ ngx_http_limit_req_module‬لحد معدل معالجة الطلب بالمفتاح المعرف أي لحد‬
‫معدل معالجة الطلبات القادمة من عنوان ‪ IP‬وحيد‪.‬‬
‫الموجه ‪ limit_req‬يحدد منطقة الذاكرة المشتركة والحجم االقصى النقجار (‪ )burst‬الطلبات‪ .‬إذا‬
‫تجاوز معدل الطلبات المعدل المضبوط للمنطقة سيتم تأخير معالجتهم‪ .‬يتم تأخير الطلبات المفرطة‬
‫حتى يتجاوز رقمهم الحجم االقصى النفجار الطلبات وعندها يتم انهاء الطلبات مع رسالة خطأ‪.‬‬
‫افتراضيا يكون الحجم االقصى لالنفجار ‪ 0‬أي مساوي لمعدل الطلبات للمنطقة‪.‬‬
‫;]‪limit_req zone=name [burst=number] [nodelay‬‬

‫المراجع‬
‫‪http://nginx.org/en/docs/http/ngx_http_limit_req_module.html‬‬
‫‪/https://www.nginx.com/blog/rate-limiting-nginx‬‬
‫‪/https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls‬‬

‫إيقاف السجالت احيانا يكون مفيد لتقليل عمليات الدخل والخرج‪ .‬الموجه ‪ access_log off‬يوقف‬
‫سجالت الوصول وبالمثل يمكن ايقاف سجالت الخطأ ‪ error_log‬يعمل هذا الموجه على مستوى‬
‫الخادم (‪ )server‬أو المكان‬
‫(‪.)location‬‬
‫يقدم ‪ nginx‬طريقة مالئمة لعرض حالة خادم الويب حيث يوفر الوحدة ‪ stub_status_module‬التي‬
‫نستخدمها بملف االعدادات ‪ nginx.conf‬في كتلة الخادم كالتالي‪:‬‬

‫{ ‪server‬‬
‫;‪listen 80 default_server‬‬
‫;‪root /var/www/html‬‬
‫{ ‪location /nginx_status‬‬
‫;‪stub_status on‬‬
‫;‪allow 127.0.0.1‬‬
‫;‪deny all‬‬
‫}‬
‫}‬
‫وهكذا يمكن عرض حالة االتصاالت الحالية في ‪ nginx‬من خالل االمر ‪curl 127.0.0.1/nginx_status‬‬
‫حيث يرسل طلب ‪ GET‬إلى الصفحة ‪ nginx_status‬على الخادم المحلي‪ .‬المخرجات تكون كالتالي‬
‫‪Active connections: 43‬‬
‫‪server accepts handled requests‬‬
‫‪7368 7368 10993‬‬
‫‪Reading: 0 Writing: 5 Waiting: 38‬‬
‫االتصاالت الفعالة (‪ )Active connections‬هي إجمالي االتصاالت المفتوحة االن ويمكن أن يكون هناك‬
‫اكثر من اتصال حالي من مستخدم واحد‪ .‬بعد ذلك نجد ثالثة ارقام تاريخية االول هو االتصاالت التي‬
‫تم قبولها الثاني هو االتصاالت التي تم التعامل معها الثالث هو الطلبات التي تم التعامل معها‪ .‬بعد‬
‫ذلك (‪ )reading‬كم راس طلب يقراه ‪ nginx‬االن و الكتابة (‪ )writing‬كم جسم طلب يقرأه أو طلبات‬
‫يعالجها أو ردود يكتبها ‪ nginx‬للعميل االن و االنتظار (‪ )waiting‬كم اتصاالت باقية حية (‪)keep-alive‬‬
‫االن‪.‬‬
‫ياتي مع ‪ nginx‬ملف ‪ /etc/nginx/mime.types‬الذي يحدد نوع االمتدادات‪.‬‬

You might also like