في عملية استخدام WordPress لإنشاء موقع ويب، تم اتخاذ العديد من "الطرق الالتفافية" لتحسين أداء WordPress وتسريع الوصول إلى موقع الويب. عندما يكون الوصول إلى موقع الويب بطيئًا واستنفاد ذاكرة وحدة المعالجة المركزية، فإن أول شيء أفكر فيه هو ترقية تكوين الخادم. لاحقًا، أجد أن بعض تجار VPS عديمي الضمير يقيدون بشدة الموارد خلف الكواليس، ومن المؤلم حقًا دفع المزيد مقابل ذلك. يرقي.

أكبر تجربة هي أنني مع نفس التكوين، أقوم بتشغيل نفس الموقع من تجار VPS مختلفين وفي ظل نفس ظروف حركة المرور، أحدهما سلس والآخر عالق يجب عليك مقارنة تقييمات الآخرين بعناية، وخاصة تقييمات أداء مضيف VPS، وإلا فسوف تنفق الكثير من المال بسهولة.

لاحقًا، عند تحسين WordPress، ركزت على التخزين المؤقت للصفحات. تتضمن المكونات الإضافية للتخزين المؤقت التي استخدمتها من قبل، على سبيل المثال لا الحصر، WordPress Super Cache وWP Fastest Cache وW3 Total Cache وcos-html-cache وCachify... باختصار ، لقد قمت بتثبيته، ولا يزال التخزين المؤقت للمكون الإضافي فعالاً في تسريعه، ولكنه يجلب أيضًا الكثير من المشكلات.

على سبيل المثال، التكوينات المعقدة، والقواعد التي تم إنشاؤها، وتعارضات المكونات الإضافية، وعدم القدرة على التعامل مع حركة المرور المفاجئة، مما يعني أن استخدام المكونات الإضافية للتخزين المؤقت لا يزال غير قادر على التعامل مع تأثير حركة المرور الكبيرة. أخيرًا، بناءً على توصية من أحد الأصدقاء، قمت بتمكين ذاكرة التخزين المؤقت Nginx fastcgi_cache واستخدمت Nginx مباشرة لإنشاء ذاكرة تخزين مؤقت للصفحة. الكفاءة أعلى بكثير من استخدام المكون الإضافي لذاكرة التخزين المؤقت PHP، وهو مناسب بشكل خاص للاستخدام على VPS الصغيرة التكوينات.

يقوم Wordpress بتشغيل طريقة تسريع ذاكرة التخزين المؤقت Nginx fastcgi_cache - مثال على تكوين Nginx

لمزيد من المقالات المتعلقة بالخبرة حول WordPress وتحسين الخادم، إليك:

  1. تجربة تحسين Linux php-fpm-تستهلك عملية php-fpm ذاكرة كبيرة ولا تسبب مشاكل في الذاكرة
  2. يضيف WordPress أمثلة على إنتاج زر مكافأة Alipay وWeChat ورابط مكافأة Paypal.me
  3. أمر Linux Crontab، بناء الجملة الأساسي للمهمة المجدولة والتشغيل التعليمي-VPS/أتمتة الخادم

ملاحظة: تم التحديث في 19 ديسمبر 2018، إن البحث في الموقع الذي يأتي مع WordPress ليس بطيئًا فحسب، بل لا يمكنه أيضًا البحث عن المزيد من الكلمات الرئيسية. يمكننا إنشاء بحث بأنفسنا أو استخدام بحث جهة خارجية للتضمين في WP: بحث محسّن في موقع الويب - Baidu وبحث Google المخصص والبحث المدمج ذاتيًا في Elasticsearch.

ملاحظة: تم التحديث في 29 سبتمبر 2019، نظرًا لأداة تحسين الخادم ngx_pagespeed التي طورتها Google، فإنها تدمج مجموعة كاملة من أدوات التحسين مثل التحميل المتأخر للصور، وwebp التكيفي، وتحسين JS وCSS، والصورة. التحسين: تقوم أداة تحسين PageSpeed ​​Server-Nginx بنشر وحدة ngx_pagespeed وتختبر تأثيرات متسارعة.

1. قم بتثبيت وحدة Nginx ngx_cache_purge

موقع إلكتروني:

  1. HTTP://labs.Frick.com/files/

1.1 LNMP

إذا كنت تستخدم حزمة تثبيت LNMP بنقرة واحدة، فقم بتحرير ملف lnmp.conf في دليل حزمة تثبيت lnmp، وأضف –add-module=/root/ngx_cache_purge-2.3 في علامات الاقتباس المفردة لـ Nginx_Modules_Options=" ، واحفظ ويتم تثبيت nginx وترقيةه بنقرة واحدة، ويمكن أن تشير الوحدات النمطية الأخرى أيضًا إلى هذا.

يتطلب ngx_cache_purge-2.3 تنزيل حزمة التثبيت من الموقع الرسمي frickle.com وفك ضغطها، الإصدار الأحدث هو 2.3.

1.2 Oneinstack

إذا كنت تستخدم لوحة OneinStack، فيمكنك تجميع وحدة ngx_cache_purge باستخدام الأمر التالي.

# nginx -V 2>&1 | grep -o ngx_cache_purge 查看ngx_cache_purge是否安装,没有数据表示未安装
cd /root/oneinstack/src
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar xzf ngx_cache_purge-2.3.tar.gz

#以下几个安装包都是Oneinstack自带的,不同的版本可能会不同,请根据情况调整
tar xzf nginx-1.14.0.tar.gz
tar xzf pcre-8.42.tar.gz
tar xzf openssl-1.0.2o.tar.gz
cd /root/oneinstack/src/nginx-1.14.0

nginx -V #查看nginx编译参数,最后加上--add-module=../ngx_cache_purge-2.3
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.0.2o --with-pcre=../pcre-8.42 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../ngx_cache_purge-2.3

make  #编译
mv /usr/local/nginx/sbin/nginx{,_`date +%F`}  #备份nginx
cp objs/nginx /usr/local/nginx/sbin
nginx -V 2>&1 | grep -o ngx_cache_purge
# 显示ngx_cache_purge表示已经安装成功

عند استخدام Nginx -V لعرض معلمات الترجمة وإضافة وحدة إضافية، تأكد من العمل وفقًا لمعلمات تجميع Nginx الخاصة بك، أي الاحتفاظ بمعلمات Nginx الأصلية وإضافة وحدة إضافية. على سبيل المثال بلدي:

2. يمكّن Nginx التخزين المؤقت fastcgi_cache - مثال للتكوين

2.1  مثال على التكوين

أدناه أنشر مباشرة مثالًا على تمكين Nginx الخاص بـ wzfou.com من تكوين ذاكرة التخزين المؤقت fastcgi_cache. التعليمات التفصيلية هي كما يلي:

#路径需要提前创建好
fastcgi_cache_path /tmp/nginx-cache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=500m;
fastcgi_temp_path /tmp/nginx-cache/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
#忽略一切nocache申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

server {
   listen 80;
   listen 443 ssl http2;
  …………………此部省略……………………
  
   set $skip_cache 0;
   #post访问不缓存
   if ($request_method = POST) {
            set $skip_cache 1;
        }   
   #动态查询不缓存
   if ($query_string != "") {
            set $skip_cache 1;
        }   
   #后台等特定页面不缓存(其他需求请自行添加即可)
   if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|/zhuye/|/wzfou.com/||/question/|/bbs/|/dongtai/|/haoyou/|/qun/|index.php|sitemap(_index)?.xml") {
            set $skip_cache 1;
        } 
   #对登录用户、评论过的用户不展示缓存
   if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
            set $skip_cache 1;
        }
   #这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!		
   location ~ [^/].php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    #新增的缓存规则
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    add_header X-Cache "$upstream_cache_status From $host";
    add_header Cache-Control  max-age=0;
    add_header Nginx-Cache "$upstream_cache_status";
    add_header Last-Modified $date_gmt;
    add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
    add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
    add_header X-XSS-Protection "1; mode=block"; # XSS 保护
    etag  on;
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 301 302 1d;
  }
  
  #缓存清理配置(可选)
  location ~ /purge( /.*) { #为防止转义,请去掉{ /之间的空格
    allow 127.0.0.1;
    #此处填写你的服务器IP
    allow 89.208.xxx.xxx;
    deny all;
    #请注意此处的WORDPRESS要与上面的keys_zone保持一致
    fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
    }
  …………………此部分省略……………………	

}

2.2  التعليمات

المحلية أو الذاكرة؟ في fastcgi_cache_path وfastcgi_temp_path، قد يقترح شخص ما تعيينه على مسار الذاكرة، على سبيل المثال: /dev/shm/nginx-cacheمستويات=1:2keys_zone=WORDPRESS:100m inactive=60m;، إذا كان لديك إدخال القرص بطيء جدًا، يوصى باستخدام هذه الطريقة، لأن سرعة القراءة والكتابة في الذاكرة سريعة جدًا.

add_header Cache-Control إذا كان المحتوى الديناميكي بحاجة إلى التحديث في الوقت الفعلي، فيمكن ضبطه على 0، وإلا فيمكن ضبط الوقت لفترة أطول.

3. قم بتثبيت المكون الإضافي Nginx Helper - قم بتحديث ذاكرة التخزين المؤقت تلقائيًا

من خلال الطريقة المذكورة أعلاه، قمنا بتكوين ذاكرة التخزين المؤقت fastcgi_cache. بعد ذلك، يتعين علينا حل مشكلة التحديث التلقائي لصفحة ذاكرة التخزين المؤقت لـ Nginx عندما يحتوي WordPress على تعليقات ومقالات جديدة. ابحث مباشرة عن المكون الإضافي Nginx Helper لتنزيله، ثم قم بإعداده، وقم بتمكينه أولاً، ثم حدد الملفات المحلية كطريقة للمسح.

يوفر المكون الإضافي أيضًا إعدادات أخرى، مثل ما إذا كان سيتم تحديث ذاكرة التخزين المؤقت لـ Nginx عند نشر مقالات وتعليقات جديدة.

نظرًا لأن مسار ذاكرة التخزين المؤقت الذي حدده مؤلف المكون الإضافي هو /var/run/nginx-cache، ويمكننا تخصيص مسار ذاكرة التخزين المؤقت وفقًا للوضع الفعلي للخادم، فإن الاختلاف في مسار ذاكرة التخزين المؤقت سيؤدي إلى قيام المكون الإضافي تكون غير قادر على العثور على ملف ذاكرة التخزين المؤقت وحذفه!

الحل هو بإضافة الكود التالي إلى wp-config.php في الدليل الجذر لـ WordPress:

//根据实际情况定义缓存的存放路径
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/tmp/wpcache');

إذا وجدت أن الكود الذي يحدد المسار أعلاه لا يعمل، فيمكنك استخدام نصيحة المدون "الطبيعي":

الأول هو تعديل المكون الإضافي وتغيير المسار في المكون الإضافي إلى المسار الخاص بك، والثاني هو استخدام الروابط الإلكترونية، /var/run/nginxcache و/tmp/wpcache

3. معاينة تأثير Nginx fastcgi_cache

بعد تمكين Nginx fastcgi_cache، يمكننا أن نرى أنه قد تم الوصول إليه في معلومات رأس المتصفح.

بالنسبة للصفحات التي تم تكوينها بحيث لا يتم تخزينها مؤقتًا، سيعرض Nginx fastcgi_cache مباشرة BYPASS.

بالإضافة إلى ذلك، سيقوم Nginx fastcgi_cache أيضًا بتجاوز المستخدمين الذين قاموا بتسجيل الدخول والمستخدمين الذين نشروا تعليقات مباشرةً.

وفي الوقت نفسه، يمكن أيضًا رؤية ملف ذاكرة التخزين المؤقت الذي تم إنشاؤه بواسطة Nginx fastcgi_cache في مسار ذاكرة التخزين المؤقت لخادمنا.

إذا وجدت أن المستخدمين الذين علقوا عليك ما زالوا يستخدمون ذاكرة التخزين المؤقت، فمن المفترض أن WP لا يتذكر ملفات تعريف الارتباط فقط أضف الكود التالي إلى functions.php.

add_action('set_comment_cookies','coffin_set_cookies',10,3);
function coffin_set_cookies( $comment, $user, $cookies_consent){
   $cookies_consent = true;
   wp_set_comment_cookies($comment, $user, $cookies_consent);
}

4. ملخص

يعد تمكين التخزين المؤقت fastcgi_cache في Nginx أمرًا مهمًا للغاية لتسريع سرعة استجابة صفحة الويب وتوفير موارد الخادم. الصورة التالية هي نتيجة اختبار alibabacloud.com، ويمكن ملاحظة أن القدرة الاستيعابية للخادم قد تحسنت بشكل كبير بعد تمكين التخزين المؤقت.

عندما قام wzfou.com بالحفر في الموقع لتمكين ذاكرة التخزين المؤقت fastcgi_cache، وجد أن معلومات التحكم في ذاكرة التخزين المؤقت تمت إضافتها إلى ملف تكوين Nginx، لكنها لا تصبح سارية المفعول دائمًا. ستحتوي معلومات رأس HTTP دائمًا على المعلومات التالية:

التحكم في ذاكرة التخزين المؤقت: عدم وجود مخزن، عدم وجود ذاكرة تخزين مؤقت، يجب إعادة التحقق منها، التحقق اللاحق = 0، التحقق المسبق = 0 وبراغما: عدم وجود ذاكرة تخزين مؤقت،

بعد التحقيق، تكمن المشكلة في جزء إعداد PHP.ini من session.cache_limiter في حزمتي LNMP وOneinstack ذات النقرة الواحدة. القيمة الافتراضية هي nocache، ونحن بحاجة إلى تعيينها على لا شيء.

اترك رد