English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هذا المقال يشرح كيفية تحقيق التفريق بين النصوص الديناميكية والثابتة باستخدام Nginx وTomcat، والتفريق بين النصوص الديناميكية والثابتة يعني من خلال استخدام nginx (أو apache وما إلى ذلك) لمعالجة طلبات المستخدمين للصور، html وما إلى ذلك من الملفات الثابتة، و Tomcat (أو weblogic) لمعالجة ملفاتjsp، do وما إلى ذلك من الملفات الديناميكية، مما يحقق معالجة زيارات الصفحات الديناميكية والثابتة من خلال استخدام أنواع مختلفة من الأكواد.
الجزء الأول: مقتضب حول Nginx:}}
Nginx هو خادم HTTP ومراقب التحويل عالي الأداء، يتمتع بمتانة عالية ودعم تثبيت الساخن وتوسيع الأنواع بسهولة. عند مواجهة الذروة في زيارات الوصول أو عند شن هجمات بطيئة من قبل أشخاص سيئي النية، قد يؤدي ذلك أيضًا إلى استنفاد ذاكرة النظام المادية وتبادلها بشكل متكرر، مما يؤدي إلى فقدان الاستجابة ويجب إعادة تشغيل الخادم، حيث قامت Nginx بتقنية توزيع الموارد في مراحل، بمعالجة ملفات الثابتة والتحويلات التحويلية غير المخزنة بسرعة، وتحقيق تحمل الأحمال وتجنب الفشل، وقد تمكنت من تحمل معالجة الأحمال العالية في مثل هذه الحالات العالية الحركة.
الجزء الثاني: تثبيت وتكوين Nginx
الخطوة الأولى: تثبيت حزمة تثبيت Nginx http://nginx.org/en/download.html
الخطوة الثانية: تثبيت Nginx على Linux
#tar zxvf nginx-1.7.8.tar.gz // ازالة التغليف #cd nginx-1.7.8 #./configure --with-http_stub_status_module --with-http_ssl_module // تشغيل صفحة حالة الخادم و模块 HTTPS
سيتم عرض رسالة خطأ عن عدم وجود مكتبة PCRE، كما هو موضح في الشكل التالي:
في هذه الحالة، قم أولاً بت�行ة الخطوة الثالثة لتثبيت PCRE، ثم قم بت�行ة الخطوة الثالثة مرة أخرى، هذا كل شيء
الخطوة الرابعة: make && make install // تجميع وتثبيت
الخطوة الخامسة: قم باختبار صحة التكوين والتثبيت، حيث تم تثبيت Nginx في /usr/local/nginx
#/usr/local/nginx/sbin/nginx -t، كما هو موضح في الشكل التالي:
الخطوة الثالثة: تثبيت PCRE على Linux
#tar zxvf pcre-8.10.tar.gz // ازالة التغليف cd pcre-8.10 ./configure make && make install // تجميع وتثبيت
ثالثًا: تحقيق الفصل بين الديناميكية والثابتة باستخدام Nginx + Tomcat
فصل الديناميكية والثابتة يعني أن Nginx يقوم بمعالجة طلبات العملاء للصفحات الثابتة (صفحات html) أو الصور، بينما يقوم Tomcat بمعالجة طلبات العملاء للصفحات الديناميكية (صفحات jsp)، لأن كفاءة معالجة الصفحات الثابتة بواسطة Nginx أعلى من Tomcat.
الخطوة الأولى: يجب علينا تكوين ملف Nginx
#vi /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' "$http_user_agent" "$http_x_forwarded_for"; access_log logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 80 default; server_name localhost; <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ // static pages are handled by nginx</span> { root /usr/tomcat/apache-tomcat-8081/webapps/ROOT; expires 30d; // caches to the client for 30 days } error_page 404 /404.html; # Redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } <span style="color:#ff0000;">location ~ \.(jsp|do)$ { //جميع الطلبات الديناميكية لـjsp يتم معالجتها بواسطة Tomcat </span> <span style="color:#ff0000;">proxy_pass http://192.168.74.129:8081; //تحويل الطلبات التي تنتهي بـ jsp أو do إلى معالجة Tomcat</span> proxy_redirect off; proxy_set_header Host $host; // The backend web server can obtain the real IP of the user through X-Forwarded-For proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; // Maximum number of bytes allowed for a single file in client requests client_body_buffer_size 128k; // Maximum number of bytes that the buffer area of the proxy can buffer user requests proxy_connect_timeout 90; // Timeout time for nginx to connect to the backend server proxy_read_timeout 90; // Response time of the backend server after a successful connection proxy_buffer_size 4k; // Set the buffer size of the proxy server (nginx) to save user header information proxy_buffers 6 32k; // proxy_buffers buffer area, if the average web page is below 32k, set it like this proxy_busy_buffers_size 64k; // Buffer size under high load (proxy_buffers * 2) size_of_proxy_temp_file 64k; // Set the size of the cache folder, if greater than this value, it will be transmitted from the upstream server } } }
الخطوة الثانية: قم بإنشاء صفحة ديناميكية ثابتة جديدة تحت webapps/ROOT في Tomcat، كما هو موضح في الشكل التالي:
الخطوة الثالثة: تشغيل خدمة Nginx
#sbin/nginx كما هو موضح في الشكل التالي:
الخطوة الرابعة: زيارة صفحتناhttp://192.168.74.129/index.html يمكن عرض المحتوى العادي بشكل صحيح، كما هو موضح في الشكل التالي:
الخطوة الخامسة: اختبار كيفية أداء Nginx و Tomcat في معالجة الصفحات الثابتة عند العدد الكبير من التزامن؟
استخدمت أمر اختبار ضغط موقع Linux ab لاختبار الأداء
النقطة 1: قم باختبار أداء Nginx في معالجة الصفحات الثابتة
ab -c 100 -n 1000 http://192.168.74.129/index.html
هذا يعني معالجة 100 طلب في نفس الوقت و تشغيل 1000 مرة لملف index.html، كما هو موضح في الشكل التالي:
النقطة 2: قم باختبار أداء Tomcat في معالجة الصفحات الثابتة
ab -c 100 -n 1000 http://192.168.74.129:8081/index.html
هذا يعني معالجة 100 طلب في نفس الوقت و تشغيل 1000 مرة لملف index.html، كما هو موضح في الشكل التالي:
معالجة ملفات الديناميكية نفسها، أداء معالجة ملفات الديناميكية الخاصة بـ Nginx أفضل من Tomcat. يمكن لـ Nginx أن يتلقى 5388 طلبًا في الثانية، بينما يمكن لـ Tomcat فقط أن يتلقى 2609 طلبًا.
الخلاصة: في ملف تكوين Nginx، قمنا بتكوين الديناميكية لمعالجتها من قبل Nginx، والديناميكية لمعالجتها من قبل Tomcat، مما يوفر أداءً.
النقطة الرابعة: تحميل الحمل وخطأ Nginx + Tomcat
في حالة العدد الكبير من التزامن، لتحسين أداء الخادم، قمنا بتقليل ضغط التزامن لكل خادم واحد، واعتمدنا على التركيب الجماعي، مما يمكن أيضًا من حل مشاكل الخطأ في الحالة التي لا يمكن الوصول إلى الخدمة عند انقطاع خادم واحد.
الخطوة الأولى: نحن قد قمنا بتركيب يومين من خوادم Tomcat، 192.168.74.129:8081 و192.168.74.129:8082
الخطوة الثانية: Nginx يعمل كخادم وسيط، عند طلب العملاء للخادم، يستخدم تحميل الحمل لمعالجة، مما يسمح بتوزيع متساوٍ لطلبات العملاء على كل خادم يومي، مما يقلل من الضغط على خادم النهاية. تكوين ملف nginx.conf تحت Nginx.
#vi /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' "$http_user_agent" "$http_x_forwarded_for"; access_log logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; <span style="color:#ff0000;">upstream localhost_server { ip_hash; server 192.168.74.129:8081; server 192.168.74.129:8082; </span> server { listen 80 default; server_name localhost; <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ // static pages are handled by nginx</span> { root /usr/tomcat/apache-tomcat-8081/webapps/ROOT; expires 30d; // caches to the client for 30 days } error_page 404 /404.html; # Redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } <span style="color:#ff0000;">location ~ \.(jsp|do)$ { // All dynamic requests of jsp are handled by Tomcat </span> <span style="color:#ff0000;">proxy_pass http://localhost_server; // Requests with jsp or do suffixes are handled by Tomcat</span> proxy_redirect off; proxy_set_header Host $host; // The backend web server can obtain the real IP of the user through X-Forwarded-For proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; // Maximum number of bytes allowed for a single file in client requests client_body_buffer_size 128k; // Maximum number of bytes that the buffer area of the proxy can buffer user requests proxy_connect_timeout 90; // Timeout time for nginx to connect to the backend server proxy_read_timeout 90; // Response time of the backend server after a successful connection proxy_buffer_size 4k; // Set the buffer size of the proxy server (nginx) to save user header information proxy_buffers 6 32k; // proxy_buffers buffer area, if the average web page is below 32k, set it like this proxy_busy_buffers_size 64k; // Buffer size under high load (proxy_buffers * 2) size_of_proxy_temp_file 64k; // Set the size of the cache folder, if greater than this value, it will be transmitted from the upstream server } } }
شرح:
1. في upstream، يشير server إلى عنوان IP (اسم النطاق) وملف الشخصي للخادم، ويمكن إضافة معلمات إضافية بعد ذلك.
1)weight: يتم تعيين وزن التحويل للخادم، القيمة الافتراضية هي 1.
2)max_fails: يتم استخدامه مع fail_timeout، ويعني أن إذا تجاوز عدد الفشل في التحويل خلال فترة fail_timeout قيمة max_fails المحددة، فإن هذا الخادم لن يكون صالحًا للاستخدام، والقيمة الافتراضية لـ max_fails هي 1.
3)fail_timeout: يعني عدد الفشل في التحويل خلال هذه الفترة الزمنية، إذا كان عدد الفشل يتجاوز قيمة fail_timeout المحددة، فإن هذا الخادم سيتم اعتباره غير صالح للاستخدام.
4)down: يعني أن هذا الخادم غير صالح للاستخدام.
5)backup: يعني جعل إعداد ip_hash لخادم هذا غير فعال، وسيتم توجيه الطلبات إلى الخادم فقط بعد أن تكون جميع الخادمات غير الباكアップ غير متاحة.
2. إعداد ip_hash هو في خادمات المجموعة، إذا تم توجيه طلب من نفس العملاء إلى عدة خادمات، قد يخزن كل خادم معلومات واحدة، مما يسبب إهدار الموارد، ويقوم إعداد ip_hash بتوجيه طلب المعلومات نفسها من العملاء للمرة الثانية إلى خادم الطلب الأول. لكن لا يمكن استخدام ip_hash مع weight في نفس الوقت.
هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعد في تعلمكم، ونأمل أن تشجعوا دورس الصراخ بشكل أكبر.
بيان: محتوا هذا المقال منشور على الإنترنت، ملكية المادة مملوكة للمساهمين، محتوى يتم إدراجه من قبل مستخدمي الإنترنت بشكل متعاوني وبدون تعديل بشري، لا تملك الموقع حقوق الملكية، ولا تتحمل المسؤولية القانونية. إذا كنت قد وجدت محتوى يخالف حقوق النسخ، يرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الدليل الداعم، وإذا تم التحقق من ذلك، سيتم حذف محتوى الاشتباه في حقوق النسخ على الفور.