على الرغم من أن المدونة موضوعة الآن على مضيف Alibaba Cloud Hong Kong CN2 VPS، إلا أن Telecom تستخدم خط CN2، لذا ستكون سرعة الوصول أسرع (لكنني تلقيت أيضًا تعليقات من أصدقاء Telecom تفيد بأن الوصول بطيء (⊙﹏⊙)) . ومع ذلك، سيكون وصول مستخدمي China Unicom ومستخدمي الهاتف المحمول أبطأ، خاصة خلال فترة الذروة المسائية، حيث قال العديد من الأصدقاء إنهم لا يستطيعون فتحه على الإطلاق.
انطلاقًا من الإعلان الرسمي، واجه Alibaba Cloud Hong Kong CN2 VPS بالفعل مشكلات مع خطوط China Unicom أو عقد خطوط الاتصالات، مما أدى إلى مشاكل في الوصول إلى غرفة الكمبيوتر بأكملها. بالطبع، من الطبيعي أن تترك Alibaba Cloud "الوعاء" للمشغلين. منذ بعض الوقت، كان على مستخدمي China Unicom تجاوز اليابان أو أماكن أخرى للوصول إلى Alibaba Cloud Hong Kong VPS.
عندما انتقلت من Kdatacenter Korea VPS إلى Alibaba Cloud Hong Kong VPS، شعرت أولاً أن Alibaba Cloud Hong Kong VPS كان بالفعل رخيصًا وجذابًا بدرجة كافية، وثانيًا، شعرت أن خط CN2 قد يكون جيدًا، على الأقل أسرع بكثير من الخط الأمريكي خط. ويبدو الآن أنه باستثناء مستخدمي الاتصالات، سيكون الوصول أكثر سلاسة، بينما سيواجه مستخدمو المشغلين الآخرين مشاكل من وقت لآخر.
من أجل حل هذه المشكلة، الشيء الطبيعي الذي يجب التفكير فيه هو تسريع CDN للموقع. وبطبيعة الحال، لا يمكن استخدام VPS المحلي بدون رقم BA، لذلك وجدت طريقة VPS كورية تستخدم وكيل Nginx العكسي لنقل طلبات الوصول لمستخدمي China Mobile وChina Unicom إلى خادم CDN، مما يمكنه زيادة سرعة الوصول إلى موقع الويب.
ستشرح هذه المقالة بالتفصيل كيفية إنشاء CDN لموقع الويب لتسريع الصفحات والملفات المقابلة وتخزينها مؤقتًا. وفي الوقت نفسه، عند تحديث محتوى موقع الويب، استخدم ngx_cache_purge لتحديث ذاكرة التخزين المؤقت على خادم CDN على الفور. حل مشكلة الحصول على الخادم المصدر أثناء الاستخدام ومشكلة IP الحقيقي للمستخدم. تتضمن المزيد من أدوات تسريع CDN وبناء مواقع الويب ما يلي:
- انضم إلى شريك Cloudflare لتقديم خدمة تسريع CloudFlare CDN مجانًا - لا حاجة لتعديل NS لدعم SSL
- استخدم Fikker لإنشاء CDN الخاص بك - يدعم HTTPS والتخزين المؤقت للصفحة والمراقبة في الوقت الفعلي وإحصائيات حركة المرور ومنع هجمات CC
- أداتان ممتازتان لمراقبة حركة مرور شبكة الخادم: Ntopng وMunin - قويتان وبديهيتان
ملاحظة: تم التحديث في 27 أبريل 2018. حاليًا، يتم استخدام Youpaiyun CDN للصور والملفات الثابتة مثل JS وCSS على موقع الويب. مقال المراجعة: البرنامج التعليمي للاستخدام والتطبيق المتسارع لـ Youpaiyun CDN-1 النسخ المتطابق للمفاتيح، CDN ديناميكي ثابت وSSL مجاني.
ملاحظة: تم التحديث في 6 مارس 2018، إذا كنت لا ترغب في إنشاء شبكة CDN بنفسك، فيمكنك تجربة خدمة تسريع CDN تابعة لجهة خارجية، حيث يعد CloudFlare المألوف خيارًا جيدًا للغاية: عشرة أشياء ربما لا تعرف شيئًا عن CloudFlare Free CDN Tip-SSLDDOSCache.
1. قم بتثبيت إنجينكس
يمكنك تثبيت Nginx وتكوينه يدويًا، أو استخدام حزمة تثبيت LNMP بنقرة واحدة لتثبيت Nginx. وأكثرها فائدة هي: Oneinstack وLNMP. إذا كنت لا ترغب في استخدامه، يمكنك تجربة حزمة تثبيت Nginx بنقرة واحدة من xiaoz (والتي تنطبق على Centos 7 وDeebian 8).
- https://GitHub.com/hellonow/nginx-cdn
يقوم Linux بتثبيت Nginx بنقرة واحدة وتشغيل CDN (الوكيل العكسي)، ما عليك سوى تنفيذ الأمر التالي لتثبيته.
wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh
chmod +x nginx.sh && ./nginx.sh
2. التكوين المتعلق بـ Nginx
أستخدم هنا wzfou.com للتسريع كمثال. هناك VPS أصلي وVPS مستخدمان كوكيل عكسي لـ CDN، عناوين IP المقابلة للاثنين هي كما يلي:
1. موقع المصدر: 192.168.1.100، وهو المكان الذي يتم فيه تخزين بيانات موقع wzfou.com فعليًا.
2. CDN:192.168.1.101 عقدة CDN، إذا كانت هناك عقد CDN متعددة، فإن طريقة التشغيل هي نفسها
قم أولاً بتعديل المضيفين على عقدة CDN، والغرض من ذلك هو إخبار عقدة CDN بمكان الحصول على بيانات موقع الويب، أي تعديل عنوان العودة إلى المصدر على النحو التالي:
vi /etc/hosts
192.168.1.100 www.wzfou.com
ثم قم بإنشاء ملف تكوين nginx wzfou.com.conf
على عقدة CDN
#创建缓存目录
mkdir -p /data/wwwroot/caches/wzfou.com
#设置缓存目录权限
chown -R www:www /data/wwwroot/caches/wzfou.com
#创建wzfou.com.conf
vi /usr/local/nginx/conf/vhost/wzfou.com.conf
أضف المحتوى التالي إلى wzfou.com.conf
. يرجى ضبط دليل ذاكرة التخزين المؤقت/وقت ذاكرة التخزين المؤقت وفقًا للموقف الفعلي. سيتم شرح معنى كل معلمة بالتفصيل لاحقًا.
proxy_cache_path /data/wwwroot/caches/wzfou.com levels=1:2 keys_zone=wzfou:50m inactive=30m max_size=50m;
server {
listen 80;
server_name wzfou.com;
charset utf-8,gbk;
location / {
proxy_set_header Accept-Encoding "";
proxy_pass https://wzfou.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache wzfou;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
}
}
التعليمات ذات الصلة هي كما يلي:
1.
/data/wwwroot/caches/wzfou.com
: هو دليل ذاكرة التخزين المؤقت2.
المستويات
: حدد أن مساحة ذاكرة التخزين المؤقت تحتوي على مستويين من أدلة التجزئة، دليل المستوى الأول يتكون من حرف واحد، والمستوى الثاني يتكون من حرفين.3.
keys_zone=wzfou:50m
: قم بتسمية مساحة ذاكرة التخزين المؤقت، هنا تسمى "wzfou"، وتشير الـ 50 مترًا التالية إلى مساحة ذاكرة التخزين المؤقت.4.
inactive=30m
: إذا لم يتم الوصول إلى المورد خلال 30 دقيقة، فسيتم حذفه.5.
max_size=50m
: يشير إلى حجم ذاكرة التخزين المؤقت على القرص الصلب وهو 50 ميجا بايت6.
proxy_cache_valid
: حدد وقت ذاكرة التخزين المؤقت لرمز الحالة، اكتب رمز الحالة في المقدمة ووقت ذاكرة التخزين المؤقت في الخلف.
أخيرًا، أعد تحميل nginx لتفعيل التكوين. إذا كنت تستخدم oneinstack، فأدخل الأمر مباشرةً: service nginx reload
. إذا كان البرنامج النصي xiaoz بنقرة واحدة، فأدخل: /usr/local /nginx/sbin/nginx -s إعادة تحميل
.
3. الوكيل العكسي لموقع HTTPS
ما تمت مشاركته أعلاه هو إعدادات الوكيل العكسي لـ Nginx لمواقع HTTP. إذا كنت تريد عكس مواقع HTTPS الوكيل، فأنت بحاجة إلى التقدم بطلب للحصول على شهادة SSL لاسم المجال الخاص بك أولاً، وبعد ذلك تحتاج فقط إلى التعيين. للحصول على مسار جيد لشهادة SSL، يرجى الرجوع إلى التكوين التالي لضبطه:
proxy_cache_path /data/wwwroot/caches/wzfou.com levels=1:2 keys_zone=wzfou:50m inactive=30m max_size=50m;
server {
listen 443 ssl http2;
ssl_certificate /data/ssl/wzfou/wzfou.com.crt;
ssl_certificate_key /data/ssl/wzfou/wzfou.com.key;
ssl_session_timeout 1d;
ssl_session_cache builtin:1000 shared:SSL:10m;
#ssl_dhparam /data/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
server_name wzfou.com;
access_log /data/wwwlogs/wzfou.com_nginx.log combined;
charset utf-8,gbk;
location / {
proxy_set_header Accept-Encoding "";
proxy_pass https://wzfou.com;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache wzfou;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
proxy_cache_min_uses 1;
expires 12h;
}
}
server {
listen 80 default_server;
return 301 https://$host$request_uri;
}
4. يقوم ngx_cache_purge بمسح ذاكرة التخزين المؤقت للتحديث
يتطلب تنظيف ذاكرة التخزين المؤقت لـ Nginx مساعدة وحدة ngx_cache_purge. يمكنك إدخال الأمر nginx -V
لعرض الوحدات المترجمة. إذا لم يكن هناك ngx_cache_purge
، فهذا يعني أن الوحدة موجودة غير مثبت، وتحتاج إلى إعادة ترجمة Nginx.
4.1 قم بتكوين ngx_cache_purge
أضف التكوين التالي إلى قسم الخادم وأعد تحميل Nginx، برجاء الحفاظ على wzfou
التالي متسقًا مع القيمة المحددة بواسطة keys_zone
، وإلا فلن يبدأ nginx.
location ~ /purge(/.*) {
allow all;
proxy_cache_purge wzfou $proxy_host$1$is_args$args;
error_page 405 =200 /purge$1;
}
إذا كنت تريد مسح ذاكرة التخزين المؤقت، فما عليك سوى إضافة معلمة purge
، مثل https://www.xiaoz.me/purge/xxx.png
إذا كان الملف موجودًا في ملف ذاكرة التخزين المؤقت، ستتم مطالبتك على النحو التالي. إذا لم يكن هناك ذاكرة تخزين مؤقت، فسيتم إرجاع 404. إذا تم إرجاع 404، فقد لا يكون التكوين ناجحًا.
4.2 يقوم WordPress بتحديث ذاكرة التخزين المؤقت تلقائيًا
بالنسبة لمدونات WordPress، إذا تم تخزين الصفحة مؤقتًا بعد تمكين CDN ولا يمكن عرضها فورًا بعد قيام المستخدم بإرسال تعليق، فيمكنك استخدام واجهة Ajax غير المتزامنة ngx_cache_purge لمسح ذاكرة التخزين المؤقت للصفحة عندما يرسل المستخدم تعليقًا. ما عليك سوى إضافة js التالي إلى footer.php
.
<script>
$(document).ready(function(){
$("#submit").click(function(){
var uri = "https://wzfou.com/purge" + window.location.pathname;
$.get(uri,function(data,status){
return true;
});
});
});
</script>
فيما يلي التكوين الكامل لـ Xiaoz Blog CDN، كمرجع فقط، تحتاج إلى استبدال Keys_zone، ومسار SSL، واسم المجال، وما إلى ذلك:
proxy_cache_path /data/caches levels=1:2 keys_zone=xiaozcdn:100m inactive=30m max_size=100m;
server
{
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /xxx/www_xiaoz_me.crt;
ssl_certificate_key /xxx/www_xiaoz_me.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
server_name www.xiaoz.me;
charset utf-8,gbk;
#删除缓存
location ~ /dcache(/.*) {
allow all;
proxy_cache_purge xiaozcdn $proxy_host$1$is_args$args;
error_page 405 =200 /purge$1;
}
location / {
#proxy_set_header Accept-Encoding "";
proxy_pass https://www.xiaoz.me;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache xiaozcdn;
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 24h;
proxy_cache_valid 500 502 503 504 0s;
proxy_cache_valid any 1s;
#达到第几次被缓存?
proxy_cache_min_uses 1;
expires 12h;
proxy_cache_key $uri$is_args$args;
}
}
server
{
listen 80;
server_name www.xiaoz.me;
rewrite ^(.*) https://www.xiaoz.me$1 permanent;
}
5. قم بعمل جيد في تحليل اسم مجال DNS
باستخدام وظائف تحليل DNS مثل الخطوط والمناطق والعملاء التي توفرها تحليل اسم مجال DNS، يمكننا حل مختلف مستخدمي النطاق العريض والمستخدمين الإقليميين ومستخدمي العملاء لعقد CDN.
استخدم اختبار أداة مشرف الموقع لمعرفة أن المستخدمين من أماكن مختلفة على wzfou.com يصلون إلى عقد CDN مختلفة، مما يعني أن نشر تسريع CDN الخاص بنا ناجح.
6. غير قادر على الحصول على IP الحقيقي بعد تمكين CDN
إذا كنت من مستخدمي WordPress، فعند تمكين تسريع Nginx CDN، ستجد أن عناوين IP لتعليقات المستخدم التي حصلت عليها الواجهة الخلفية لـ WP أصبحت عقد CDN. كما أن حل هذه المشكلة بسيط للغاية، ما عليك سوى إضافة الكود التالي إلى wp - في ملف config.php:
if (isset($_SERVER['HTTP_X_REAL_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP']; }
7. ملخص
يقوم Nginx بربط أسماء النطاقات بشكل عكسي لإنشاء خادم تسريع CDN بتكلفة منخفضة وتثبيت وتكوين بسيط، وهو مناسب بشكل خاص للأصدقاء الذين لا يريدون استخدام CDN مدفوع الأجر، في الواقع، يستخدم العديد من تسريع CDN الاحترافي أيضًا وكيل Nginx العكسي للتسريع يمكن القول أن Nginx CDN هي طريقة تسريع فعالة للغاية.
هناك مشكلتان يجب الانتباه إليهما عند استخدام تسريع Nginx CDN. إحداهما هي مشكلة تحديث ذاكرة التخزين المؤقت، إذا تم تحديث صفحة الويب الخاصة بك بشكل متكرر، فيمكنك تعيين الفاصل الزمني للتحديث. والثانية هي مشكلة عنوان IP الحقيقي للمستخدم يمكننا استخدام PHP أو Nginx وما إلى ذلك للحصول على عنوان IP الحقيقي مباشرة.