it-swarm-eu.dev

Co je nejlepší možnost ukládání do mezipaměti pro aplikaci WordPress multi-site na non-shared hosting?

Jaký typ konfigurace zásuvného modulu do mezipaměti doporučujete a proč za následujících předpokladů:

  • úplnou kontrolu konfigurace serveru
  • běží WordPress v multi-site/multi-domain režimu
  • většina domén nepoužívá předponu www. (cookies)
  • (touha), aby bylo možné zakázat ukládání do mezipaměti pro konkrétní adresy IP nebo na základě souboru cookie, pokud provádíte změny stránek, které nepotřebujete ukládání do mezipaměti.

Podrobnosti: Používám plugin Firefox Google Page Speed ​​a snažím se optimalizovat rychlost webových stránek.

Také se nemusíte řídit obecnými pokyny, jako jsou menší obrázky.

Buďme spravedliví, použití více než jednoho pluginu pro ukládání do mezipaměti vám přinese více problémů, než to vyřeší, zkuste prosím dát jednoduchý přístup.

13
sorin

Základní odpověď na "co plugin" by pravděpodobně byla W3 Total Cache . Momentálně je to jeden z nejfunkčnějších a aktivně vyvinutých pluginů. Nicméně kompletní výkon řetězce je mnohem delší, že WordPress plugin sám zvládne.

  1. Konfigurace webového serveru (Apache nebo něco jiného) (doba odezvy, čas do prvního bajtu, záhlaví).
  2. Databáze (čas strávený zpracováním dotazů).
  3. PHP/WordPress (doba generování stránky, spotřeba paměti).
  4. Výkon front-end (množství požadavků HTTP, šířka pásma).

Dobrým začátkem by byl statický plugin pro ukládání do mezipaměti (např. W3) s mezipamětí založenou na operační paměti s operačním kódem jako APC .

Ale odtud existuje mnohem více (a více složitějších) věcí, které můžete udělat, jako jsou sítě pro distribuci obsahu, alternativní webové servery atd.

4
Rarst

Můj výkon WordPress a ukládání do mezipaměti

To je nejlepší WordPress výkon zásobníku pro nízké až střední rozsah jednoho serveru nebo VPS. Klasifikuji střední rozsah jako jedno jádro s přibližně 1G paměti a poměrně rychlými disky.

Server Stack

  • Linux - Buď Debian Lenny nebo Ubuntu
  • Nginx - nakonfigurovaný jako reverzní proxy statická souborová cache
  • Apache - Apache zvládne PHP, které Nginx vyloží na alternativní port
  • MySql - Vyžaduje WP, ujistěte se, že běží vaše nejnovější stabilní verze
  • PHP - Poslední stabilní verze větve 5.2 nebo 5.3

PHP Cache

  • APC - Konfigurujte ji s pamětí mmap a velikostí shm alespoň 128M

WordPress Výkon Plugin Stack

  • Nginx proxy cache integrátor
  • W3 Total Cache - Nastavení vyrovnávací paměti stránky na disk rozšířené, minify na disk a objekt a db na APC.
    • Vlastní hostované CDN - Vytvořte 4 aliasy, které odkazují na doménu na serveru nastavenou pouze pro poskytování statického souboru

S W3 Total Cache používáme disk pro cache stránek a minify, protože Nginx bude sloužit našim statickým souborům velmi rychle.

Jak konfigurovat Nginx tak, aby sloužil statickým souborům a předával PHP Apache

Problémem samotného použití Apache je, že otevírá spojení a zasílá php na každý požadavek i pro statické soubory. Toto plýtvání spojení, protože Apache bude udržovat je otevřené a když máte spoustu provozu vaše připojení bude zapadl dolů, i když nejsou používány.

Apache standardně naslouchá požadavkům na portu 80, který je výchozím webovým portem. Nejdříve provedeme změny v souborech Apache conf a virtual hosts, abychom mohli poslouchat na portu 8080.

Apache Config

httpd.conf

nastavte KeepAlive na off

ports.conf

NameVirtualHost *:8080
Listen 8080

Virtual Host Host

<VirtualHost 127.0.0.1:8080>
     ServerAdmin [email protected]
     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>

Měli byste také nainstalovat mod_rpaf takže vaše protokoly budou obsahovat skutečné adresy IP vašich návštěvníků. Pokud ne, vaše logy budou mít 127.0.0.1 jako původní IP adresu.

Nginx Config

V Debianu můžete použít repozitáře k instalaci, ale obsahují pouze verzi 0.6.33. Chcete-li nainstalovat novější verzi, musíte přidat balíčky backports lenny

$ nano /etc/apt/sources.list

Přidat tento řádek do souboru deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

Do souboru přidejte následující:

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

Chcete-li importovat klíč z aplikace backports.org a ověřit balíky a aktualizovat databázi balíčku systému, zadejte následující příkazy:

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

Nyní nainstalujte s apt-get

apt-get install nginx

To je mnohem snazší než kompilace ze zdroje.

Konfigurace souborů Nginx conf a server

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

Nyní budete muset nastavit svůj virtuální hosting Nginx. Rád používám metodu s podporou stránek s každým v Host sym připojený k souboru v adresáři, který je k dispozici.

$ 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

Poznámka:

Nastavení statické mezipaměti v následujících souborech bude fungovat pouze v případě, že je povolen plugin integrátoru proxy 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;
}

Pro stránku WordPress conf (Pro více stránek budete potřebovat pouze jeden 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;
        }

        }

Vlastní hostované CDN conf

Pro vaše vlastní hostované CDN conf stačí jej nastavit tak, aby sloužil statické soubory bez proxy pass

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

    }

Nyní spusťte servery

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

Výsledky benchmarků

Na Apache Bench toto nastavení může teoreticky sloužit 1833.56 požadavků za sekundu

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

alt text

19
Chris_O

Použijte webový prostor s minimálně 64 MB RAM pro Multisite a použijte APC a Memcached na Apache, cache není statická a můžete bez problémů používat všechny funkce WP. Skenujete přes PageSpeed ​​číst i další možnosti, tam byl kódován v tématu. Mezipaměť může udělat skvělou práci, ale nemůže opravit špatné téma nebo plugin. Dalším řešením je použití subdomén bez cookies jako CDN ve WordPressu. Přidat do souboru wp-config.php pro soubory cookie pouze v doméně, nikoli v subdoméně.

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

Nyní nastavte nové funkce v function.php motivu nebo napište plugin, který nahradí cestu statického obsahu na vaše subdomény, vaše vlastní 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 );
}

nyní funkce šablony a šablony stylů

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

Nyní si přečtěte Rychlost stránky na statických CDN adresách frontend bez cookies.

Do zdroje .htaccess přidejte také následující zdrojový kód:

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

Použijte prosím tuto funkci, jsou také příklady a můžete své řešení napsat s mými nápady.

4
bueltge

Zásobník webového serveru

V podstatě udržujte každou operaci v paměti!

  • Moderní CPU, vysoká paměť šířka pásma, protože WordPress je hlavně kopírování paměti, čas sub-ms přístupu k disku, zkuste UpCloud!
  • Tenká virtualizační vrstva, zkuste UpCloud! Držte se dál od populárních, nepodnikatelských poskytovatelů
  • Rychlý operační systém: No systemd, Dostatečná entropie, vyvážení IRQ, Nízká spotřeba paměti
  • Blokují útočníky útočníků: Fail2ban, trvale blokují stínové sítě
  • Anycast DNS
  • Rychlý webový server: Apache MPM
  • Paralelní připojení CDN s rychlostmi podobnými RAM (Amazon CloudFront)
  • Vysokorychlostní SSL: certifikát ECDSA, zdroj Entropy, TLS1.2, Ciphersuites pro AES-NI, cache pro relace SSL, sešívání OCSP, HTTP/2
  • Moderní PHP s OPcache, připojené přes FastCGI
  • Lean WordPress instalace: pouze minimální a auditované pluginy
  • Redis mezipaměť objektů v paměti
  • TokuDB (fraktální strom) MariaDB motor
  • Optimalizace zdrojů
  • Vyjmout JavaScript
  • Průběžné monitorování: Pingdom, HetrixTools

Všechny mé znalosti jsou open-source https://github.com/szepeviktor/debian-server-tools

0
Szépe Viktor