Qual è la migliore opzione di caching per WordPress multi-sito sulla non-hosting condiviso?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/2490

  •  16-10-2019
  •  | 
  •  

Domanda

Cosa caching plugin di configurazione mi consigliate e perché sotto le seguenti ipotesi:

  • il pieno controllo del server di configurazione
  • WordPress in esecuzione in modalità multi-sito / multi-dominio
  • la maggior parte dei domini non si utilizza www. prefisso (cookie)
  • (desiderio) di essere in grado di caching disabilitare per gli IP specifici o sulla base di un cookie, quando si fanno modifiche al sito che non è necessario nella cache.

Dettagli: sto usando Firefox Google Page Speed ??plugin per cercare di ottimizzare la velocità del sito.

Inoltre si prega di non guidare con linee guida generali, come le immagini più piccole.

fiera BE Let, utilizzando più di un plugin di caching vi porterà più problemi di quanti ne possa risolvere quindi per favore cercate di dare un approccio semplice.

È stato utile?

Soluzione

risposta di base a "ciò plugin" sarebbe probabilmente W3 Total Cache . Si tratta di uno dei plugin più funzionali e sviluppato attivamente al momento. Tuttavia catena completa di prestazioni è molto più lungo che WordPress Plugin sola maniglia può.

  1. Web server (Apache o qualcos'altro) configurazione (tempo di risposta, il tempo di primo byte, intestazioni).
  2. Database (tempo trascorso elaborazione delle query).
  3. PHP / WordPress (pag tempo di generazione, il consumo di memoria).
  4. prestazioni front-end (quantità di richieste HTTP, la larghezza di banda).

buon inizio sarebbe plugin di caching statico (come W3) con cache basata sulla memoria opcode come APC .

Ma da lì ci sono il modo più (e il modo più complesso) cose che potreste fare, come le reti di distribuzione di contenuti, web server alternativi, ecc.

Altri suggerimenti

Il mio WordPress Prestazioni e Caching Stack

Questa è la migliore pila prestazioni WordPress per un basso a metà varia singolo server o VPS. Sto classificare fascia media come single core con circa 1G di memoria e unità abbastanza veloce.

Server Stack

  • Linux - Sia Debian Lenny o Ubuntu
  • Nginx - configurato come file statico della cache proxy inverso
  • Apache - Apache gestirà il PHP scaricati da Nginx su una porta alternativa
  • MySql - Richiesto da WP, assicurarsi che il proprio esegue la versione più recente stabile
  • PHP - Ultima versione stabile di 5.2 o 5.3 ramo

PHP Cache

  • APC - configurarlo con la memoria e la dimensione mmap SHM di almeno 128M

prestazioni wordpress Plugin Stack

  • Nginx proxy cache integratore
  • W3 Total Cache - cache di pagina Imposta su disco migliorato, minify a disco e oggetto e db ad APC.
    • Auto Hosted CDN - Creare 4 alias CNAME che puntano a dominio sul server istituito solo per servire file statico

Con W3 Total Cache stiamo usando disco per la cache di pagina e Minify perché Nginx servirà i nostri file statici molto veloce.

Come configurare Nginx per servire i file statici e passare PHP per Apache

Il problema con l'utilizzo di Apache da solo è che si apre una connessione e colpisce php su ogni richiesta anche per i file statici. Questo spreca connessioni perché Apache tenerli aperti e quando hai un sacco di traffico le connessioni sarà impantanati anche se non vengono utilizzati.

Per impostazione predefinita Apache ascolta le richieste sulla porta 80, che è la porta Web predefinita. In primo luogo ci accingiamo a fare cambiamenti al nostro conf Apache e file host virtuale in ascolto sulla porta 8080.

Apache Config

httpd.conf

set KeepAlive off

ports.conf

NameVirtualHost *:8080
Listen 8080

per sito Virtual Host

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

Si dovrebbe anche installare mod_rpaf in modo che i log conterranno gli indirizzi IP reali dei visitatori. In caso contrario il vostro log avranno 127.0.0.1 come l'indirizzo IP di origine.

Nginx Config

Su Debian è possibile utilizzare i repository per l'installazione, ma contengono solo la versione 0.6.33. Per installare una versione successiva è necessario aggiungere i pacchetti di backport Lenny

$ nano /etc/apt/sources.list

Aggiungi questa riga al file deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

Aggiungere la seguente al file:

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

eseguire i seguenti comandi per importare la chiave dal backports.org per verificare pacchetti e aggiornare il database dei pacchetti del sistema:

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

Ora installare con apt-get

apt-get install nginx

Questo è molto più facile che la compilazione dai sorgenti.

Nginx conf e file del server di configurazione

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

Ora sarà necessario impostare il virtual hosting Nginx. Mi piace usare il metodo di siti abilitati con ogni SYM v ospite collegato a un file nella directory sites-available.

$ 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

Nota:

Le impostazioni della cache statiche nei seguenti file sarà solo il lavoro se il plugin proxy cache integratore Nginx è abilitato.

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

sito WordPress Per conf (per il multi sito si avrà solo bisogno di un 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;
        }

        }

Auto Hosted CDN conf

Per la vostra auto ospitato CDN conf avete solo bisogno di impostare fino a servire i file statici senza il passaggio del proxy

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

    }

Ora avviare i server

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

Il benchmark Risultati

Apache Bench questa configurazione può teoricamente servire 1833.56 richieste al secondo

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

alt text

Usa uno spazio web con RAM minima 64 MB per multisito e l'uso APC e Memcached sul Apache, cache non statico ed è possibile utilizzare tutte le WP-funzioni senza problemi. Si esegue la scansione tramite Page Speed ??visualizzato anche altre opzioni, non c'è stato codificato nel tema. Una cache può fare una grande opera, ma non può riparare un tema cattivo o plug-in. Una un'altra soluzione è quella di utilizzare i sottodomini senza cookie come CDN in WordPress. Aggiungere questo al wp-config.php per i cookie solo sul dominio, non il sottodominio.

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

Ora impostare nuove funzioni nel functions.php del tema o di scrivere un plugin per sostituire il contenuto statico modulo percorso dei sottodomini, la vostra abitudine 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 );
}

ora la funzione per modello e foglio di stile-path

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

Ora Velocità di lettura pagina sul frontend statica CDN URL senza cookie.

aggiungere anche la fonte seguito alla .htaccess per i contenuti del blocco dublicate:

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

Si prega di utilizzare la funzione, è anche esempi ed è possibile scrivere le tue soluzioni con le mie idee.

Webserver pila

mantenere Essenzialmente ogni operazione in memoria!

  • moderna CPU, alta di memoria di larghezza di banda come WordPress è principalmente la copia della memoria, sub-msec tempo di accesso al disco, provare UpCloud!
  • livello di virtualizzazione sottile, provare UpCloud! Tenere lontano da fornitori popolare, non-enterprise
  • sistema operativo veloce: No systemd, entropia Basta, equilibrio IRQ, l'utilizzo della memoria bassa
  • Blocca attaccanti martellanti: Fail2ban, permanentemente reti blocco ombra
  • Anycast DNS
  • webserver rapida: Apache Evento MPM
  • Collegamento in parallelo CDN con RAM-come velocità (cloudfront)
  • alta velocità SSL: certificato ECDSA, fonte Entropia, TLS1.2, Ciphersuites per AES-NI, cache di sessione SSL, OCSP pinzatura, HTTP / 2
  • PHP moderno con OPcache, collegato tramite FastCGI
  • magra installazione di WordPress: plugin minimi e controllati solo
  • Redis in memoria cache degli oggetti
  • TokuDB (albero frattale) motore di MariaDB
  • L'ottimizzazione delle risorse
  • Taglia JavaScript
  • Monitoraggio continuo: Pingdom, HetrixTools

Tutta la mia conoscenza è open-source https://github.com/szepeviktor/debian- server-tools

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top