गैर-साझा होस्टिंग पर वर्डप्रेस मल्टी-साइट के लिए सबसे अच्छा कैशिंग विकल्प क्या है?


13

निम्नलिखित मान्यताओं के तहत आप किस कैशिंग प्लगइन विन्यास की सलाह देते हैं और क्यों:

  • सर्वर कॉन्फ़िगरेशन का पूर्ण नियंत्रण
  • मल्टी-साइट / मल्टी-डोमेन मोड में वर्डप्रेस चलाना
  • अधिकांश डोमेन www.उपसर्ग (कुकीज़) का उपयोग नहीं कर रहे हैं
  • (इच्छा) विशिष्ट आईपी के लिए या कुकी पर आधारित कैशिंग को अक्षम करने में सक्षम होने के लिए, जब आप उस साइट में बदलाव करते हैं, जिसके लिए आपको कोचिंग की आवश्यकता नहीं होती है।

विवरण: मैं वेबसाइट की गति का अनुकूलन करने के लिए फ़ायरफ़ॉक्स Google पेज स्पीड प्लगइन का उपयोग कर रहा हूं।

कृपया छोटे चित्रों की तरह, सामान्य दिशानिर्देशों के साथ मार्गदर्शन न करें।

आइए निष्पक्ष रहें, एक से अधिक कैशिंग प्लगइन का उपयोग करने से आपको अधिक समस्याएं आएंगी, जिससे यह हल हो जाएगा इसलिए कृपया एक सरल दृष्टिकोण देने की कोशिश करें।

जवाबों:


4

"क्या प्लगइन" के लिए मूल उत्तर शायद W3 कुल कैश होगा । यह इस समय सबसे कार्यात्मक और सक्रिय रूप से विकसित प्लगइन्स में से एक है। हालाँकि पूर्ण प्रदर्शन श्रृंखला बहुत लंबी है कि वर्डप्रेस प्लगइन अकेले संभाल सकता है।

  1. वेब सर्वर (अपाचे या कुछ और) कॉन्फ़िगरेशन (प्रतिक्रिया समय, पहली बाइट के लिए समय, हेडर)।
  2. डेटाबेस (समय बिताए प्रसंस्करण क्वेरी)।
  3. PHP / WordPress (पेज पीढ़ी समय, मेमोरी खपत)।
  4. फ्रंट-एंड प्रदर्शन (HTTP अनुरोधों की मात्रा, बैंडविड्थ)।

अच्छी शुरुआत एपीसी की तरह ओपोड मेमोरी-आधारित कैश के साथ स्थिर कैशिंग प्लगइन (डब्ल्यू 3 की तरह) होगी ।

लेकिन वहाँ से आप (और अधिक जटिल तरीके से) चीजें कर सकते हैं, जैसे सामग्री वितरण नेटवर्क, वैकल्पिक वेब सर्वर, आदि।


wp सबसे तेज़ कैश w3 कुल कैश को धड़कता है, वो भी बिना वस्तु कैश के।
урослав Рахматуллин

19

मेरा वर्डप्रेस प्रदर्शन और कैशिंग स्टैक

यह निम्न से मध्यम श्रेणी के एकल सर्वर या VPS के लिए सर्वश्रेष्ठ वर्डप्रेस प्रदर्शन स्टैक है। मैं लगभग 1G मेमोरी और काफी तेज ड्राइव के साथ मिड रेंज को सिंगल कोर के रूप में वर्गीकृत कर रहा हूं।

सर्वर स्टैक

  • लिनक्स - या तो डेबियन लेन या उबंटू
  • Nginx - रिवर्स प्रॉक्सी स्टेटिक फ़ाइल कैश के रूप में कॉन्फ़िगर किया गया
  • Apache - Apache वैकल्पिक पोर्ट पर Nginx द्वारा लोड किए गए PHP को हैंडल करेगा
  • MySql - WP द्वारा आवश्यक, सुनिश्चित करें कि आपका नवीनतम स्थिर संस्करण चल रहा है
  • PHP - 5.2 या 5.3 शाखा का नवीनतम स्थिर संस्करण

PHP कैश

  • APC - इसे कम से कम 128 M मिमी मेमोरी और shm आकार के साथ कॉन्फ़िगर करें

वर्डप्रेस प्रदर्शन प्लगइन स्टैक

  • Nginx प्रॉक्सी कैश इंटीग्रेटर
  • W3 कुल कैश - डिस्क को बढ़ाया, डिस्क, और वस्तु को छोटा और एपीसी को db के लिए पृष्ठ कैश सेट करें।
    • Self Hosted CDN - 4 cname उपनाम बनाएँ जो सर्वर पर डोमेन को इंगित करता है बस स्थैतिक फ़ाइल की सेवा के लिए सेट करें

W3 कुल कैश के साथ हम पेज कैश के लिए डिस्क का उपयोग कर रहे हैं और मिनिमाइज़ करते हैं क्योंकि Nginx हमारी स्टैटिक फ़ाइलों को बहुत तेज़ी से सेवा देगा।

स्थिर फ़ाइलों की सेवा करने के लिए और अपाचे के लिए PHP पास करने के लिए Nginx को कैसे कॉन्फ़िगर करें

अकेले अपाचे का उपयोग करने में समस्या यह है कि यह एक कनेक्शन खोलता है और स्थिर फ़ाइलों के लिए भी हर अनुरोध पर php को हिट करता है। यह कनेक्शन बर्बाद करता है क्योंकि अपाचे उन्हें खुला रखेगा और जब आपके पास बहुत सारे ट्रैफ़िक होंगे तो आपके कनेक्शन का उपयोग नहीं किया जाएगा, भले ही उनका कनेक्शन काट दिया गया हो।

डिफ़ॉल्ट रूप से Apache पोर्ट 80 पर अनुरोधों के लिए सुनता है जो डिफ़ॉल्ट वेब पोर्ट है। सबसे पहले हम पोर्ट 8080 पर सुनने के लिए अपने Apache conf और वर्चुअल होस्ट फ़ाइलों में बदलाव करने जा रहे हैं।

अपाचे विन्यास

httpd.conf

KeepAlive को बंद करने के लिए सेट करें

ports.conf

NameVirtualHost *:8080
Listen 8080

प्रति साइट वर्चुअल होस्ट

<VirtualHost 127.0.0.1:8080>
     ServerAdmin info@yoursite.com
     ServerName yoursite.com
     ServerAlias www.yoursite.com
     DocumentRoot /srv/www/yoursite.com/public_html/
     ErrorLog /srv/www/yoursite.com/logs/error.log
     CustomLog /srv/www/yoursite.com/logs/access.log combined
</VirtualHost>

आपको mod_rpaf भी स्थापित करना चाहिए ताकि आपके लॉग में आपके विज़िटर के असली आईपी पते शामिल हों। यदि आपके लॉग नहीं हैं तो मूल पते के रूप में 127.0.0.1 होगा।

Nginx विन्यास

डेबियन पर आप रिपॉजिटरी का उपयोग कर सकते हैं स्थापित करने के लिए, लेकिन वे केवल संस्करण 0.6.33 होते हैं। बाद के संस्करण को स्थापित करने के लिए आपको लेनी बैकपोर्ट पैकेज को जोड़ना होगा

$ nano /etc/apt/sources.list

इस लाइन को फाइल में जोड़ें deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

फ़ाइल में निम्न जोड़ें:

Package: nginx
Pin: release a=lenny-backports 
Pin-Priority: 999

पैकेज सत्यापित करने और अपने सिस्टम के पैकेज डेटाबेस को अपडेट करने के लिए backports.org से कुंजी आयात करने के लिए निम्न आदेश जारी करें:

$ wget -O - http://backports.org/debian/archive.key | apt-key add -
$ apt-get update

अब apt-get के साथ इंस्टॉल करें

apt-get install nginx

यह स्रोत से संकलन की तुलना में बहुत आसान है।

Nginx conf और सर्वर फाइलें कॉन्फिगर करती हैं

nginx.conf

user www-data;
worker_processes  4;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log  /var/log/nginx/access.log;
    client_body_temp_path /var/lib/nginx/body 1 2;
    gzip_buffers 32 8k;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;

  gzip_comp_level   6;
  gzip_http_version 1.0;
  gzip_min_length   0;
  gzip_types        text/html text/css image/x-icon
        application/x-javascript application/javascript text/javascript application/atom+xml application/xml ;



    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

अब आपको अपना Nginx वर्चुअल होस्टिंग सेट अप करना होगा। मैं साइटों में उपलब्ध निर्देशिका में एक फ़ाइल से जुड़े प्रत्येक होस्ट की सहानुभूति के साथ साइटों-सक्षम पद्धति का उपयोग करना पसंद करता हूं।

$ mkdir /etc/nginx/sites-available  
$ mkdir /etc/nginx/sites-enabled
$ touch /etc/nginx/sites-available/yourservername.conf
$ touch /etc/nginx/sites-available/default.conf
$ ln -s  /etc/nginx/sites-available /etc/nginx/sites-enabled
$ nano /etc/nginx/sites-enabled/default.conf

default.conf

ध्यान दें:

निम्न फ़ाइलों में स्थिर कैश सेटिंग्स केवल तभी काम करेंगी जब Nginx प्रॉक्सी कैश इंटीग्रेटर प्लगइन सक्षम हो।

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=staticfilecache:180m  max_size=500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 30;
proxy_read_timeout 120;
proxy_send_timeout 120;

#IMPORTANT - this sets the basic cache key that's used in the static file cache.
proxy_cache_key "$scheme://$host$request_uri";

upstream wordpressapache {
        #The upstream apache server. You can have many of these and weight them accordingly,
        #allowing nginx to function as a caching load balancer 
        server 127.0.0.1:8080 weight=1 fail_timeout=120s;
}

वर्डप्रेस साइट कॉन्फिडेंस (मल्टी साइट के लिए आपको केवल एक vhost की आवश्यकता होगी)

server {
        #Only cache 200 responses, and for a default of 20 minutes.
        proxy_cache_valid 200 20m;

        #Listen to your public IP
        listen 80;

        #Probably not needed, as the proxy will pass back the host in "proxy_set_header"
        server_name www.yoursite.com yoursite.com;
        access_log /var/log/nginx/yoursite.proxied.log;  

        # "combined" matches apache's concept of "combined". Neat.
        access_log  /var/log/apache2/nginx-access.log combined;
        # Set the real IP.
        proxy_set_header X-Real-IP  $remote_addr;

        # Set the hostname
        proxy_set_header Host $host;

        #Set the forwarded-for header.
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
                        # If logged in, don't cache.
                        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                                set $do_not_cache 1;
                        }
                        proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
                        proxy_cache staticfilecache;
                        proxy_pass http://wordpressapache;
        }

        location ~* wp\-.*\.php|wp\-admin {
                        # Don't static file cache admin-looking things.
                        proxy_pass http://wordpressapache;
        }

        location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
                        # Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header,
                        # whether logged in or not (may be too heavy-handed).
                        proxy_cache_valid 200 120m;
                        expires 864000;
                        proxy_pass http://wordpressapache;
                        proxy_cache staticfilecache;
        }

        location ~* \/[^\/]+\/(feed|\.xml)\/? {
 # Cache RSS looking feeds for 45 minutes unless logged in.
                        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                                set $do_not_cache 1;
                        }
                        proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
                        proxy_cache_valid 200 45m;
                        proxy_cache staticfilecache;
                        proxy_pass http://wordpressapache;
        }

        location = /50x.html {
                root   /var/www/nginx-default;
        }

        # No access to .htaccess files.
        location ~ /\.ht {
                deny  all;
        }

        }

सेल्फ होस्टेड सीडीएन कॉन्फिडेंस

अपने स्वयं के होस्ट किए गए सीडीएन के लिए, आपको केवल प्रॉक्सी पास के बिना स्थिर फ़ाइलों की सेवा के लिए इसे सेट करने की आवश्यकता है

server {

        proxy_cache_valid 200 20m;
        listen 80;
        server_name yourcdndomain.com;
        access_log   /srv/www/yourcdndomain.com/logs/access.log;
        root   /srv/www/yourcdndomain.com/public_html/;

 proxy_set_header X-Real-IP  $remote_addr;

      location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
                                # Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header,
                                # whether logged in or not (may be too heavy-handed).

                                proxy_cache_valid 200 120m;
                        expires 7776000;
                        proxy_cache staticfilecache;
                }

location = /50x.html {
                root   /var/www/nginx-default;
        }

 # No access to .htaccess files.
        location ~ /\.ht {
          deny  all;
        }

    }

अब सर्वर शुरू करें

$ /etc/init.d/apache2 restart  
$/etc/init.d/nginx start

बेंचमार्क परिणाम

अपाचे बेंच पर यह सेटअप सैद्धांतिक रूप से प्रति सेकंड 1833.56 अनुरोधों को पूरा कर सकता है

$ ab -n 1000 -c 20 http://yoursite.com/

वैकल्पिक शब्द


1
+ वाह, यह प्रभावशाली था, लेकिन फिलहाल मैं नेगनेक्स सेटअप को छोड़ना पसंद करूंगा क्योंकि यह सर्वर सेटअप को बहुत जटिल बना देगा।
सोरिन

मैं अपने VPS होस्टिंग पर आपके निर्देशों का पालन करना चाहता हूं। लेकिन मुझे डर है कि अगर कोई समस्या हो सकती है, अगर मैं कुछ भी गलत करता हूं। मैंने पहले ऐसा नहीं किया है। क्या मेरे जैसा कोई उपयोगकर्ता इसे करने में सक्षम है?
user391

1
धन्यवाद। गंभीर रूप से उपयोगी है। मुझे इसे आजमाना है। काश मैं इसे एक से अधिक बार मॉडरेट कर पाता :)
नासिर

4

मल्टीसाइट के लिए न्यूनतम 64 एमबी राम के साथ एक वेबस्पेस का उपयोग करें और एपीसी और अपाचे पर मेमकाटेड का उपयोग करें, स्थिर नहीं है और आप बिना समस्याओं के सभी WP-फ़ंक्शन का उपयोग कर सकते हैं। आप पेजस्पीड के माध्यम से स्कैन करते हैं, अन्य विकल्पों को भी पढ़ते हैं, विषय में कोड किया गया था। एक कैश एक महान काम कर सकता है, लेकिन एक खराब थीम या प्लगइन की मरम्मत नहीं कर सकता है। एक अन्य समाधान वर्डप्रेस में सीडीएन के रूप में कुकीज़ के बिना उप डोमेन का उपयोग करना है। इसे डोमेन पर कुकीज़ के लिए wp-config.php में जोड़ें, न कि उपडोमेन पर।

define( 'COOKIE_DOMAIN', 'example.com' );

अब थीम के functions.php में नए फ़ंक्शन सेट करें या अपने उपडोमेन, अपने कस्टम CDN के लिए पथ फ़ॉर्म स्थैतिक सामग्री को बदलने के लिए एक प्लगइन लिखें।

// replace for CDN on bloginfo
if ( !function_exists('fb_add_static_wpurl') ) {
    function fb_add_static_wpurl($info, $show) {

        if ( is_admin() )
            return $info;

        $keys = array(
            'url',
            'wpurl',
            'stylesheet_url',
            'stylesheet_directory',
            'template_url',
            'template_directory',
            );

        if ( in_array( $show, $keys ) ) {

            $wpurl = get_bloginfo('wpurl');

            $search = array(
                $wpurl . '/wp-content/images/',
                $wpurl . '/wp-content/download/',
                $wpurl . '/wp-content/themes/',
                $wpurl . '/wp-content/plugins/',
            );

            $replace = array(
                'http://cdn1.example.com/',
                'http://cdn2.example.com/',
                'http://cdn3.example.com/',
                'http://cdn4.example.com/',
            );

            return str_replace( $search, $replace, $info );

        } else {
            return $info;
        }
    }
    add_filter( 'bloginfo_url', 'fb_add_static_wpurl', 9999, 2 );
}

अब टेम्पलेट और स्टाइलशीट-पथ के लिए फ़ंक्शन

function fb_add_static_stylesheet_uri($uri) {

            if ( is_admin() )
                return $uri;

            $wpurl = get_bloginfo('wpurl');

            $search = array(
                $wpurl . '/wp-content/images/',
                $wpurl . '/wp-content/download/',
                $wpurl . '/wp-content/themes/',
                $wpurl . '/wp-content/plugins/',
            );

            $replace = array(
                'http://cdn1.example.com/',
                'http://cdn2.example.com/',
                'http://cdn3.example.com/',
                'http://cdn4.example.com/',
            );
            return str_replace( $search, $replace, $uri );

}
add_filter ( 'template_directory_uri', 'fb_add_static_stylesheet_uri' );
add_filter ( 'stylesheet_uri', 'fb_add_static_stylesheet_uri' );
add_filter ( 'stylesheet_directory_uri', 'fb_add_static_stylesheet_uri' );

अब कुकीज़ के बिना सामने वाले स्थिर CDN URL पर पृष्ठ गति पढ़ें।

साथ ही ब्लॉक डाइजेट सामग्री के लिए .htaccess का अनुसरण स्रोत जोड़ें:

##
# Explicitly send a 404 header if a file on cdn[0-9].example.org is not
# found. This will prevent the start page (empty URL) from being loaded.
##
RewriteCond %{HTTP_HOST} ^cdn[0-9]\.example\.org [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* - [R=404,L]

##
# Do not dispatch dynamic resources via cdn[0-9].example.org.
##
RewriteCond %{HTTP_HOST} ^cdn[0-9]\.example\.org [NC]
RewriteCond %{REQUEST_FILENAME} \.(php|html)$
RewriteRule .* - [R=404,L]

कृपया फ़ंक्शन का उपयोग करें, यह भी उदाहरण है और आप अपने उपाय मेरे विचारों के साथ लिख सकते हैं।


0

वेबसर्वर स्टैक

अनिवार्य रूप से हर ऑपरेशन को स्मृति में रखें!

  • आधुनिक सीपीयू, वर्डप्रेस के रूप में उच्च मेमोरी बैंडविड्थ मुख्य रूप से मेमोरी कॉपी, सब-मिसे डिस्क एक्सेस समय है, ऊपर क्लिक करें!
  • पतली वर्चुअलाइजेशन परत, ऊपर की कोशिश करो! लोकप्रिय, गैर-उद्यम प्रदाताओं से दूर रखें
  • फास्ट ऑपरेटिंग सिस्टम: कोई सिस्टमड, पर्याप्त एन्ट्रापी, आईआरक्यू बैलेंस, कम मेमोरी उपयोग
  • ब्लॉक हथौड़ा हमलावर: Fail2ban, स्थायी रूप से छाया जाल ब्लॉक
  • एनीकास्ट डीएनएस
  • त्वरित वेबसर्वर: अपाचे इवेंट एमपीएम
  • रैम जैसी गति के साथ समानांतर कनेक्शन CDN (Amazon CloudFront)
  • उच्च गति एसएसएल: ईसीडीएसए प्रमाणपत्र, एन्ट्रॉपी स्रोत, टीएलएस 1.2, एईएस-एनआई के लिए सिपर्सुइट्स, एसएसएल सत्र कैश, ओसीएसपी स्टेपलिंग, एचटीटीपी / 2
  • ओप्पाचे के साथ आधुनिक PHP, FastCGI के माध्यम से जुड़ा हुआ है
  • लीन वर्डप्रेस इंस्टॉलेशन: केवल न्यूनतम और ऑडिटेड प्लगइन्स
  • मेमोरी ऑब्जेक्ट कैश में रेडिस
  • TokuDB (भग्न पेड़) MariaDB इंजन
  • संसाधन अनुकूलन
  • जावा स्क्रिप्ट पर काटें
  • सतत निगरानी: पीएसटीपी, हेट्रिक्सटूल

मेरा सारा ज्ञान खुला-स्रोत https://github.com/szepeviktor/debian-server-tools है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.