يستهلك مشروع ويب محمل تيرابايت من حركة المرور. بالنسبة للأعداد الكبيرة ، يمكن أن توفر المدخرات بنسبة 10-20٪ بشكل كبير الأموال وتساعد على عدم تجاوز الحصص.ماذا أفعل إذا اقتربت حركة المرور بشكل خطير من حدود تعريفة الاستضافة الخاصة بك أو حتى تجاوزتها؟في هذه المقالة ، سنقوم بتحليل التقنيات الأساسية التي تساعد على حفظ حركة المرور على خادم الويب.اعصره!
أسهل طريقة للتوفير في حركة المرور هي ضغطها. يؤدي ذلك إلى تحميل معالج الخادم ، ولكنه يسمح لك بإرسال البيانات إلى العميل بشكل أسرع ، وتقليل حجمها ، بحيث يمكن إغلاق الاتصالات بشكل أسرع. في الغالب يتم استخدام الخوارزميات المتوافقة مع Deflate ، ولكن هناك أيضًا خوارزميات غريبة.Gzip
خوارزمية الضغط الأكثر شيوعًا. ضغط بدون فقد ، مع نسبة ضغط جيدة (قابلة للتكوين من 1 إلى 9 ، الافتراضي 6) وتفريغ سريع. بسيطة وفعالة ومناسبة في معظم الحالات.
Nginxgzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;
اباتشيAddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
Zopfli
البديل الحديث لـ gzip يضغط بنسبة 3-8٪ أفضل ، ولكنه أبطأ بكثير (ينخفض ضغطه على العميل بنفس السرعة). يعمل على Deflate ، وبالتالي فهو متوافق بنسبة 100٪ مع zlib ، كما أن الدعم في المتصفحات ممتلئ أيضًا.git clone https://code.google.com/p/zopfli/
cd zopfli
make
Nginxgzip_static on;
بروتلي
مثل Zopfli ، تم تطويره في أحشاء Google. قادرة على الضغط ليس فقط في الإحصائيات ، ولكن أيضًا على الطاير ، مثل gzip. على عكس الخوارزميات السابقة ، فإنه لا يبحث فقط عن التكرارات في النص ، ولكن أيضًا يعين على الفور قاموسه الخاص ، والذي يحتوي على الكثير من العلامات وعبارات التعليمات البرمجية القياسية ، وهو فعال للغاية لضغط html / css / js: إذا كان Zopfli يعطي ضغطًا بنسبة 8٪ تقريبًا بعد gzip ، ثم Brotli قادر على رمي 10-15 ٪ أخرى ، بينما شخص آخر لديه 23 ٪! ولكن يتم دعمه فقط في https وهو غير متوافق مع zlib / deflate. نظام Caniuse مشجع: يتوفر دعم
Nginxعلى شكل وحدة قياسية فقط في Plus ، ويجب بناء Nginx العادي مع وحدة خارجية ( --add-module = / path / to / ngx_brotli ):git clone https://github.com/google/ngx_brotli.git
git clone https://github.com/bagder/libbrotli.git
./autogen.sh
./configure
make
cd /path/to/nginx
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-stream_geoip_module=dynamic --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed' --add-module=/path/to/ngx_brotli
make
التكوين:brotli_static on;
في الوضع الديناميكي:brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css text/xml application/x-javascript;
أباتشيكل شيء أبسط هنا ، قم بتثبيت mod_brotli وتكوين الوحدة:<IfModule brotli_module>
BrotliCompressionLevel 10
BrotliWindowSize 22
AddOutputFilterByType BROTLI text/html text/plain text/css text/xml
AddOutputFilterByType BROTLI text/css
AddOutputFilterByType BROTLI application/x-javascript application/javascript
AddOutputFilterByType BROTLI application/rss+xml
AddOutputFilterByType BROTLI application/xml
AddOutputFilterByType BROTLI application/json
</IfModule>
مخبأ ذلك!
يمكنك أيضًا إلغاء تحميل القناة بين المستخدم والخادم ، مما يقلل الحاجة إلى إعادة تحميل الموارد. إذا تم تخزين الملف في الذاكرة المخبئية ، فعند الطلب التالي ، سيتلقى المتصفح محتوياته محليًا.تسمح لك رؤوس HTTP للتحكم في ذاكرة التخزين المؤقت و Expires و Vary بتصميم سياسة تخزين مؤقت مرنة للغاية ، على الرغم من أنه يمكنك وضع حد أقصى للعمر = 2592000 في كل مكان على الجبهة.Nginxlocation ~* ^.+\.(js|css)$ {
expires max;
}
اباتشي<ifModule mod_headers.c>
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
<FilesMatch "\.(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 5 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType application/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
ExpiresByType text/html "access plus 43200 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
وزعها!
عادة ما تكلف شبكة CDN الجيدة لموقع مزدحم الكثير من المال ، ولكن للمرة الأولى ، يكون الإصدار المجاني كافيًا. يمكن أن يؤدي تنزيل الموارد الثقيلة عبر CDN إلى تقليل عدد الزيارات عدة مرات! لا تهمل هذه الفرصة ، خاصة عندما تكون مجانية. هناك الكثير من المقالات لمرة واحدة مع أعلى الشبكات المجانية على الإنترنت ، ولكن Cloudflare دائمًا ما يأتي أولاً.
ولديهم أيضًا عمال خدمة مجانيون ، يمكنك من خلالهم رفع CDN يدويًا مع التفضيل والمحظيات. هناك أمثلة قليلة ، ولكن البرنامج التعليمي موجود على بوابة SW الرسمية.استنتاج
إذا كنت لا تستخدم gzip على الأقل ، فمرحباً بك في الإنترنت ، هنا أكثر من 80٪ من المواقع تعمل معها. إذا لم يكن لديك ضغط قياسي كافٍ و -9 ، فاستخدم Brotli مع نسخة احتياطية على شكل Zopfli (نظرًا لأن Brotley ليس لديه تغطية 100٪ حتى الآن). هذا يمكن أن يوفر الكثير من حركة المرور:- gzip: ضغط 50-95٪ حسب المحتوى. متوسط الويب 65-80٪
- Zopfli: + 3-8٪ ضغط نسبة إلى gzip في المتوسط ، لكن يحدث 10٪
- Brotli: ضغط بنسبة 10-15٪ نسبة إلى gzip اعتمادًا على المحتوى الذي يحتوي على لقطات نادرة تصل إلى 20٪ وأعلى
بيانات ذاكرة التخزين المؤقت على العميل ، وهذا يقلل من حركة المرور أثناء الزيارات المتكررة بنسبة 99٪ أو أقل ، اعتمادًا على سياسة التخزين المؤقت المحددة والتغييرات على الموقع.استخدم CDN لتقديم المحتوى والموازنة الأساسية. يتحمل خادم التوزيع العبء الأكبر ، بينما سيتم تقليل حركة المرور الرئيسية عدة مرات. كم يعتمد بالضبط على الشبكة والحمل ووضع التشغيل المحدد.كل ما سبق يحدث في أقصر وقت ممكن ولا يتطلب إعادة هيكلة معقدة لهيكل الخادم ، مما يمنحك الوقت لتصميمه المختص. قم بضغط التكاليف وتخزينها وتوزيعها ومراقبتها حتى لا تحصل على الكثير من المال.