Apa opsi caching terbaik untuk multi-situs WordPress di hosting yang tidak dibagi?

13

Konfigurasi plugin caching apa yang Anda rekomendasikan dan mengapa berdasarkan asumsi berikut:

  • kontrol penuh dari konfigurasi server
  • menjalankan WordPress dalam mode multi-situs / multi-domain
  • sebagian besar domain tidak menggunakan www.awalan (cookie)
  • (keinginan) untuk dapat menonaktifkan caching untuk IP tertentu atau berdasarkan cookie, ketika Anda melakukan perubahan pada situs Anda tidak perlu caching.

Detail: Saya menggunakan plugin Firefox Google Page Speed ​​untuk mencoba mengoptimalkan kecepatan situs web.

Juga tolong jangan memandu dengan pedoman umum, seperti gambar kecil.

Mari kita bersikap adil, menggunakan lebih dari satu plugin caching akan membawa Anda lebih banyak masalah daripada yang akan diselesaikan, jadi cobalah untuk memberikan pendekatan sederhana.

Sorin
sumber

Jawaban:

4

Jawaban dasar untuk "plugin apa" mungkin adalah W3 Total Cache . Ini adalah salah satu plugin yang paling fungsional dan paling aktif dikembangkan saat ini. Namun rantai kinerja yang lengkap jauh lebih lama daripada yang bisa ditangani oleh plugin WordPress.

  1. Konfigurasi server web (Apache atau yang lainnya) (waktu respons, waktu hingga byte pertama, tajuk).
  2. Database (waktu yang dihabiskan untuk memproses permintaan).
  3. PHP / WordPress (waktu pembuatan halaman, konsumsi memori).
  4. Kinerja front-end (jumlah permintaan HTTP, bandwidth).

Awal yang baik adalah plugin caching statis (seperti W3) dengan cache berbasis memori opcode seperti APC .

Tetapi dari sana ada cara yang lebih banyak (dan jauh lebih rumit) yang dapat Anda lakukan, seperti jaringan distribusi konten, server web alternatif, dll.

Jarang
sumber
wp cache tercepat mengalahkan total cache w3, bahkan tanpa cache objek.
Ярослав Рахматуллин
19

Kinerja WordPress dan Caching Stack saya

Ini adalah tumpukan kinerja WordPress terbaik untuk server tunggal rendah atau menengah atau VPS. Saya mengklasifikasikan kisaran menengah sebagai inti tunggal dengan memori sekitar 1G dan drive yang cukup cepat.

Stack Server

  • Linux - Baik Debian Lenny atau Ubuntu
  • Nginx - Dikonfigurasi sebagai cache file statis proksi terbalik
  • Apache - Apache akan menangani PHP yang diturunkan oleh Nginx pada port alternatif
  • MySql - Diperlukan oleh WP, pastikan Anda menjalankan versi stabil terbaru
  • PHP - Versi stabil terbaru dari cabang 5.2 atau 5.3

Cache PHP

  • APC - Konfigurasikan dengan memori mmap dan ukuran shm minimal 128M

Stack Plugin Kinerja WordPress

  • Nginx proxy cache integrator
  • W3 Total Cache - Atur cache halaman ke disk yang ditingkatkan, minify ke disk, dan objek dan db ke APC.
    • Self Hosted CDN - Buat 4 alias cname yang mengarah ke domain pada server yang disiapkan hanya untuk melayani file statis

Dengan W3 Total Cache kami menggunakan disk untuk cache halaman dan memperkecil karena Nginx akan melayani file statis kami dengan sangat cepat.

Cara mengkonfigurasi Nginx untuk menyajikan file statis dan meneruskan PHP ke Apache

Masalah dengan menggunakan Apache saja adalah bahwa ia membuka koneksi dan mengenai php pada setiap permintaan bahkan untuk file statis. Ini membuang-buang koneksi karena Apache akan membuatnya tetap terbuka dan ketika Anda memiliki banyak lalu lintas koneksi Anda akan macet bahkan jika mereka tidak digunakan.

Secara default, Apache mendengarkan permintaan pada port 80 yang merupakan port web default. Pertama-tama kita akan membuat perubahan pada Apache conf dan file host virtual untuk mendengarkan pada port 8080.

Konfigurasi Apache

httpd.conf

nonaktifkan KeepAlive

ports.conf

NameVirtualHost *:8080
Listen 8080

Host Virtual Per Situs

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

Anda juga harus menginstal mod_rpaf sehingga log Anda akan berisi alamat ip asli pengunjung Anda. Jika tidak, log Anda akan memiliki 127.0.0.1 sebagai alamat ip yang berasal.

Konfigurasi Nginx

Pada Debian Anda dapat menggunakan repositori untuk menginstal tetapi mereka hanya berisi versi 0.6.33. Untuk menginstal versi yang lebih baru Anda harus menambahkan paket backports lenny

$ nano /etc/apt/sources.list

Tambahkan baris ini ke file deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

Tambahkan yang berikut ke file:

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

Keluarkan perintah berikut untuk mengimpor kunci dari backports.org untuk memverifikasi paket dan memperbarui basis data paket sistem Anda:

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

Sekarang instal dengan apt-get

apt-get install nginx

Ini jauh lebih mudah daripada kompilasi dari sumber.

Konfigurasi nginx dan file server konfigurasi

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

Sekarang Anda perlu mengatur hosting virtual Nginx Anda. Saya suka menggunakan metode yang diaktifkan situs dengan setiap sym host v ditautkan ke file di direktori yang tersedia situs.

$ 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

catatan:

Pengaturan cache statis dalam file berikut ini hanya akan berfungsi jika plugin integrator cache proksi Nginx diaktifkan.

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

Per konfigurasi situs WordPress (Untuk multi situs, Anda hanya perlu satu 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;
        }

        }

Konfigurasi CDN Host Otomatis

Untuk conf CDN yang dihosting sendiri, Anda hanya perlu mengaturnya untuk menyajikan file statis tanpa izin 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;
        }

    }

Sekarang mulai server

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

Hasil Benchmark

Di Apache Bench, pengaturan ini secara teoritis dapat melayani 1833,56 permintaan per detik

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

teks alternatif

Chris_O
sumber
1
+ Wow, ini mengesankan tetapi untuk saat ini saya akan lebih memilih untuk melewatkan pengaturan nginx karena itu akan membuat pengaturan server terlalu rumit.
Sorin
Saya ingin mengikuti instruksi Anda di hosting VPS saya. Tetapi saya khawatir jika ada masalah yang bisa terjadi, jika saya melakukan kesalahan. Saya belum melakukannya sebelumnya. Bisakah pengguna seperti saya dapat melakukannya?
user391
1
Terima kasih. Sangat bermanfaat. Saya akan mencoba ini. Saya berharap saya bisa memperbaiki ini lebih dari sekali :)
Nasir
4

Gunakan ruang web dengan minimum 64MB Ram untuk Multisite dan gunakan APC dan Memcached di Apache, cache tidak statis dan Anda dapat menggunakan semua fungsi WP tanpa masalah. Anda memindai melalui PageSpeed ​​membaca juga opsi lain, ada kode dalam tema. Cache dapat melakukan pekerjaan yang hebat, tetapi tidak dapat memperbaiki tema atau plugin yang buruk. Solusi lain adalah dengan menggunakan subdomain tanpa cookie sebagai CDN di WordPress. Tambahkan ini ke wp-config.php untuk Cookie hanya pada domain, bukan subdomain.

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

Sekarang atur fungsi-fungsi baru di functions.php dari tema atau tulis sebuah plugin untuk mengganti jalur bentuk konten statis ke subdomain Anda, CDN kustom Anda.

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

sekarang fungsi untuk template dan stylesheet-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' );

Sekarang baca Kecepatan Halaman pada URL statis CDN frontend tanpa cookie.

Juga tambahkan sumber ikuti ke .htaccess untuk memblokir konten 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]

Silakan gunakan fungsi, juga contoh dan Anda dapat menulis solusi Anda dengan ide-ide saya.

bueltge
sumber
0

Tumpukan server web

Intinya menjaga setiap operasi dalam memori!

  • CPU modern, bandwidth memori tinggi karena WordPress terutama menyalin memori, waktu akses disk sub-msec, coba UpCloud!
  • Lapisan virtualisasi yang tipis, coba UpCloud! Jauhkan dari penyedia non-perusahaan yang populer
  • Sistem operasi cepat: Tidak ada systemd, Entropi yang cukup, keseimbangan IRQ, Penggunaan memori yang rendah
  • Blokir palu penyerang: Fail2ban, memblokir jaring bayangan secara permanen
  • DNS Anycast
  • Server web cepat: Apache Event MPM
  • CDN koneksi paralel dengan kecepatan seperti RAM (Amazon CloudFront)
  • SSL kecepatan tinggi: sertifikat ECDSA, sumber Entropi, TLS1.2, Ciphersuites untuk AES-NI, cache sesi SSL, stapel OCSP, HTTP / 2
  • PHP modern dengan OPcache, terhubung melalui FastCGI
  • Instalasi Lean WordPress: hanya plugin minimal dan diaudit
  • Redis cache objek dalam memori
  • Mesin TokuDB (pohon fraktal) MariaDB
  • Optimalisasi sumber daya
  • Potong pada JavaScripts
  • Pemantauan berkelanjutan: Pingdom, HetrixTools

Semua pengetahuan saya adalah open-source https://github.com/szepeviktor/debian-server-tools

Szépe Viktor
sumber