Paylaşılmayan barındırmada WordPress çoklu sitesi için en iyi önbellekleme seçeneği nedir?


13

Hangi önbellek eklentisi yapılandırmasını öneriyorsunuz ve neden aşağıdaki varsayımlar altında:

  • sunucu yapılandırmasının tam kontrolü
  • WordPress'i çoklu site / çoklu alan modunda çalıştırma
  • alan adlarının çoğu www.önek (çerezler) kullanmaz
  • (arzu), belirli IP'ler için veya bir çereze dayalı olarak önbelleği devre dışı bırakabilmek için, sitede değişiklikler yaptığınızda önbelleğe almanıza gerek yoktur.

Ayrıntılar: Web sitesinin hızını optimize etmek için Firefox Google Page Speed ​​eklentisini kullanıyorum.

Ayrıca, lütfen daha küçük resimler gibi genel yönergelere rehberlik etmeyin.

Adil olalım, birden fazla önbellek eklentisi kullanmak çözeceğinden daha fazla sorun getirecektir, bu yüzden lütfen basit bir yaklaşım vermeye çalışın.

Yanıtlar:


4

"Hangi eklenti" için temel cevap muhtemelen W3 Toplam Önbellek olacaktır . Şu anda en işlevsel ve aktif olarak geliştirilmiş eklentilerden biridir. Ancak, tam performans zinciri tek başına WordPress eklentisinin işleyebileceğinden çok daha uzundur.

  1. Web sunucusu (Apache veya başka bir şey) yapılandırması (yanıt süresi, ilk bayta kadar süre, başlıklar).
  2. Veritabanı (sorguları işlemek için harcanan zaman).
  3. PHP / WordPress (sayfa oluşturma süresi, bellek tüketimi).
  4. Ön uç performansı (HTTP isteklerinin miktarı, bant genişliği).

İyi başlangıç, APC gibi opcode bellek tabanlı önbellekli statik önbellek eklentisi (W3 gibi) olacaktır .

Ancak buradan, içerik dağıtım ağları, alternatif web sunucuları vb. Gibi yapabileceğiniz çok daha fazla (ve çok daha karmaşık) şeyler var.


wp en hızlı önbellek nesne önbelleği olmadan bile w3 toplam önbelleği yener.
Ярослав Рахматуллин

19

WordPress Performansım ve Önbellek Yığını

Bu, düşük ila orta aralıklı tek bir sunucu veya VPS için en iyi WordPress performans yığınıdır. Orta menzili yaklaşık 1G bellek ve oldukça hızlı sürücülerle tek çekirdekli olarak sınıflandırıyorum.

Sunucu Yığını

  • Linux - Debian Lenny veya Ubuntu
  • Nginx - Ters proxy statik dosya önbelleği olarak yapılandırıldı
  • Apache - Apache alternatif bir bağlantı noktasında Nginx tarafından yüklenen PHP'yi işleyecek
  • MySql - WP için gereklidir, en son kararlı sürümü çalıştırdığınızdan emin olun
  • PHP - 5.2 veya 5.3 şubesinin son kararlı sürümü

PHP Önbellek

  • APC - mmap bellek ve shm boyutu en az 128M ile yapılandırın

WordPress Performans Eklentisi Yığını

  • Nginx proxy önbellek entegratörü
  • W3 Total Cache - Sayfa önbelleğini geliştirilmiş diske ayarla, diske küçült ve nesne ile db'yi APC'ye ayarla.
    • Kendi Kendine Barındırılan CDN - Sunucuda yalnızca statik dosya sunmak üzere ayarlanmış etki alanına işaret eden 4 cname diğer adı oluşturun

W3 Toplam Önbellek ile sayfa önbelleği için diski kullanıyoruz ve küçültüyoruz çünkü Nginx statik dosyalarımıza çok hızlı hizmet verecek.

Nginx'i statik dosyaları sunacak ve PHP'yi Apache'ye geçirecek şekilde nasıl yapılandırılır

Apache'yi tek başına kullanmayla ilgili sorun, bir bağlantı açar ve statik dosyalar için bile her istekte php'ye vurmasıdır. Bu bağlantıyı boşa harcar, çünkü Apache onları açık tutacaktır ve çok fazla trafiğiniz olduğunda bağlantılarınız kullanılmasa bile bataklığa uğramış olacaktır.

Varsayılan olarak Apache, varsayılan web bağlantı noktası olan 80 numaralı bağlantı noktasındaki istekleri dinler. Öncelikle Apache conf ve sanal ana makineler dosyalarımızda 8080 numaralı bağlantı noktasını dinlemek için değişiklikler yapacağız.

Apache Yapılandırması

httpd.conf

KeepAlive'yi kapalı olarak ayarla

ports.conf

NameVirtualHost *:8080
Listen 8080

Site Başına Sanal Ana Bilgisayar

<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>

Ayrıca günlükleriniz ziyaretçilerinizin gerçek ip adreslerini içerecek şekilde mod_rpaf da kurmalısınız . Aksi takdirde, günlükleriniz kaynak IP adresi olarak 127.0.0.1'e sahip olacaktır.

Nginx Yapılandırması

Debian'da depoları yüklemek için kullanabilirsiniz, ancak yalnızca 0.6.33 sürümünü içerirler. Daha sonraki bir sürümü kurmak için lenny backports paketlerini eklemelisiniz

$ nano /etc/apt/sources.list

Bu satırı dosyaya ekle deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

Dosyaya aşağıdakileri ekleyin:

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

Paketleri doğrulamak ve sisteminizin paket veritabanını güncellemek için anahtarı backports.org'dan içe aktarmak için aşağıdaki komutları verin:

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

Şimdi apt-get ile yükleyin

apt-get install nginx

Bu kaynaktan derlemekten çok daha kolaydır.

Nginx conf ve sunucu dosyaları yapılandırması

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/*;
}

Şimdi Nginx sanal hostinginizi kurmanız gerekecek. Ben siteler kullanılabilir yöntem siteleri kullanılabilir dizindeki bir dosyaya bağlı her v ana bilgisayar sym ile kullanmak istiyorum.

$ 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

Not:

Aşağıdaki dosyalardaki statik önbellek ayarları yalnızca Nginx proxy önbellek entegratörü eklentisi etkinse çalışır.

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;
}

WordPress site başına conf (Çoklu site için sadece bir vhost'a ihtiyacınız olacak)

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;
        }

        }

Kendinden Barındırmalı CDN conf

Kendi barındırdığınız CDN conf için yalnızca proxy geçişi olmadan statik dosyaları sunacak şekilde ayarlamanız gerekir

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;
        }

    }

Şimdi sunucuları başlatın

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

Deney Sonuçları

Apache Bench'te bu kurulum teorik olarak saniyede 1833.56 istek sunabilir

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

alternatif metin


1
+ Vay canına, bu etkileyiciydi ama şu an sunucu kurulumunu çok karmaşık hale getireceği için nginx kurulumunu atlamayı tercih edeceğim.
sorin

VPS hostingimdeki talimatlarınızı takip etmek istiyorum.Ancak herhangi bir sorun ortaya çıkarsa, yanlış bir şey yaparsam korkarım. Daha önce yapmadım.
user391

1
Teşekkürler. Cidden faydalı. Bunu deneyeceğim. Keşke bunu bir kereden fazla modlandırabilseydim :)
Nasir

4

Multisite için minimum 64MB Ram ile bir web alanı kullanın ve Apache'de APC ve Memcached kullanın, statik değil önbellek kullanın ve tüm WP işlevlerini sorunsuz bir şekilde kullanabilirsiniz. PageSpeed ​​üzerinden tararsanız diğer seçenekleri de okursunuz, temada kodlanmıştı. Önbellek harika bir iş yapabilir, ancak kötü bir temayı veya eklentiyi onaramaz. Başka bir çözüm, WordPress'te CDN olarak çerezsiz alt alan adları kullanmaktır. Bunu alt etki alanında değil, yalnızca etki alanındaki Çerezler için wp-config.php dosyasına ekleyin.

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

Şimdi temanın fonksiyonlar.php'sinde yeni işlevler ayarlayın veya alt alanlarınıza, özel CDN'nize giden statik içerik yolunun yerini almak için bir eklenti yazın.

// 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 );
}

şimdi şablon ve stil sayfası yolu işlevi

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' );

Şimdi ön uç statik CDN URL'lerinde çerezler olmadan Sayfa Hızı'nı okuyun.

Ayrıca, toplu içeriği engellemek için aşağıdaki kaynağı .htaccess dosyasına ekleyin:

##
# 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]

Lütfen işlevi kullanın, aynı zamanda örneklerdir ve fikirlerimi fikirlerimle yazabilirsiniz.


0

Web sunucusu yığını

Esasen her işlemi hafızada tutun!

  • Modern CPU, WordPress gibi yüksek bellek bant genişliği ağırlıklı olarak bellek kopyalama, alt msec disk erişim süresi, UpCloud'u deneyin!
  • İnce sanallaştırma katmanı, UpCloud'u deneyin! Popüler, kurumsal olmayan sağlayıcılardan uzak durun
  • Hızlı işletim sistemi: Sistem yok, Yeterli entropi, IRQ dengesi, Düşük bellek kullanımı
  • Çekiç saldırganlarını engelle: Fail2ban, gölge ağlarını kalıcı olarak engelle
  • Anycast DNS
  • Hızlı web sunucusu: Apache Event MPM
  • RAM benzeri hızlara sahip paralel bağlantı CDN'si (Amazon CloudFront)
  • Yüksek hızlı SSL: ECDSA sertifikası, Entropi kaynağı, TLS1.2, AES-NI için Şifrelemeler, SSL oturum önbelleği, OCSP zımbalama, HTTP / 2
  • FastCGI ile bağlı OPcache ile modern PHP
  • Yalın WordPress yüklemesi: yalnızca minimal ve denetlenmiş eklentiler
  • Bellek içi nesne önbelleğini yeniden oluşturma
  • TokuDB (fraktal ağaç) MariaDB motoru
  • Kaynak optimizasyonu
  • JavaScripts'te Kes
  • Sürekli izleme: Pingdom, HetrixTools

Bütün bilgilerim açık kaynak kodlu https://github.com/szepeviktor/debian-server-tools

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.