Professional Documents
Culture Documents
Nginx Cheatsheet in Arabic
Nginx Cheatsheet in Arabic
االداء
الضغط
تقوم الوحدة 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
}
المراجع
/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 الموحد
#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ملفات .htaccessالن لها تاثير كبير على االداء بسب حاجة خادوم الويب لقراءة كل
دليل في الرابط المطلوب لكي يطبق قواعد .htaccessإن وجدها بأي دليل.
يمكن تطبيق حد الوصول على مستوى الخادوم كله httpأو الخادوم الوهمي serverأو الطلب
location
على المستخدمين
الموجه auth_basicالذي يُحدد الكلمة التي نريد عرضها .الموجه auth_basic_user_fileيحدد الملف
الذي به حسابات المستخدمين بالشكل user:passويجب أن تكون كلمة السر معماة .استخدم االداة
htpasswdلتوليد هذا الملف وإلضافة المستخدمين حيث تقوم بتعمية كلمة السر تلقائيا.
اجعل ملف كلمات السر مخفي واضبط تصريح الملف على 600واعطي nginxتصريح القراءة
فقط.
على المضيفين
الموجه allowيسمح للعناوين المحدد بالوصول العناوين قد تكون عنوان IPأو شبكة كاملة بصيغة
CIDRأو الكلمة المفتاحية allلتعني الجميع .عكسه الموجه .denyيفحص nginxالقواعد بالتسلسل
حتى يجد أول مطابقة للطلب.
المراجع
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الذي يحدد نوع االمتدادات.