Tùy chọn bộ nhớ đệm tốt nhất cho nhiều trang web WordPress trên lưu trữ không chia sẻ là gì?


13

Bạn khuyên dùng cấu hình plugin bộ nhớ đệm nào và tại sao theo các giả định sau:

  • toàn quyền kiểm soát cấu hình máy chủ
  • chạy WordPress ở chế độ đa trang web / đa miền
  • hầu hết các tên miền không sử dụng www.tiền tố (cookie)
  • (mong muốn) để có thể vô hiệu hóa bộ đệm ẩn cho các IP cụ thể hoặc dựa trên cookie, khi bạn thay đổi trang web mà bạn không cần bộ đệm.

Chi tiết: Tôi đang sử dụng plugin Firefox Google Page Speed ​​để cố gắng tối ưu hóa tốc độ của trang web.

Ngoài ra xin vui lòng không hướng dẫn với các hướng dẫn chung chung, như hình ảnh nhỏ hơn.

Hãy công bằng, sử dụng nhiều hơn một plugin bộ nhớ đệm sẽ mang lại cho bạn nhiều vấn đề hơn nó sẽ giải quyết, vì vậy hãy thử đưa ra một cách tiếp cận đơn giản.

Câu trả lời:


4

Câu trả lời cơ bản cho "plugin gì" có thể là W3 Total Cache . Đây là một trong những plugin có chức năng và được phát triển tích cực nhất vào lúc này. Tuy nhiên, chuỗi hiệu suất hoàn chỉnh dài hơn nhiều mà một mình plugin WordPress có thể xử lý.

  1. Cấu hình máy chủ web (Apache hoặc một cái gì khác) (thời gian đáp ứng, thời gian đến byte đầu tiên, các tiêu đề).
  2. Cơ sở dữ liệu (thời gian xử lý truy vấn).
  3. PHP / WordPress (thời gian tạo trang, tiêu thụ bộ nhớ).
  4. Hiệu suất front-end (số lượng yêu cầu HTTP, băng thông).

Khởi đầu tốt sẽ là plugin bộ nhớ đệm tĩnh (như W3) với bộ đệm dựa trên bộ nhớ opcode như APC .

Nhưng từ đó, có nhiều cách (và cách phức tạp hơn) những thứ bạn có thể làm, như mạng phân phối nội dung, máy chủ web thay thế, v.v.


Bộ nhớ cache nhanh nhất wp đánh bại tổng bộ đệm w3, ngay cả khi không có bộ đệm đối tượng.
Ярослав Рахматуллин

19

Hiệu suất WordPress và bộ nhớ đệm của tôi

Đây là ngăn xếp hiệu suất WordPress tốt nhất cho một máy chủ hoặc VPS tầm thấp đến trung bình. Tôi đang phân loại tầm trung là lõi đơn với bộ nhớ khoảng 1G và ổ đĩa khá nhanh.

Ngăn xếp máy chủ

  • Linux - Hoặc Debian Lenny hoặc Ubuntu
  • Nginx - Được định cấu hình như bộ đệm ẩn tệp proxy ngược
  • Apache - Apache sẽ xử lý PHP được Nginx giảm tải trên một cổng thay thế
  • MySql - Được yêu cầu bởi WP, hãy đảm bảo bạn đang chạy phiên bản ổn định mới nhất
  • PHP - Phiên bản ổn định mới nhất của chi nhánh 5.2 hoặc 5.3

Bộ nhớ cache PHP

  • APC - Định cấu hình nó với bộ nhớ mmap và kích thước shm tối thiểu 128M

Ngăn xếp hiệu suất WordPress

  • Bộ tích hợp bộ đệm proxy Nginx
  • W3 Total Cache - Đặt bộ đệm trang vào đĩa được tăng cường, thu nhỏ vào đĩa, và đối tượng và db thành APC.
    • CDN tự lưu trữ - Tạo 4 bí danh tên trỏ trỏ đến tên miền trên máy chủ được thiết lập chỉ để phục vụ tệp tĩnh

Với W3 Total Cache, chúng tôi đang sử dụng đĩa cho bộ đệm trang và giảm thiểu vì Nginx sẽ phục vụ các tệp tĩnh của chúng tôi rất nhanh.

Cách định cấu hình Nginx để phục vụ các tệp tĩnh và truyền PHP cho Apache

Vấn đề với việc sử dụng Apache một mình là nó mở ra một kết nối và truy cập php vào mọi yêu cầu ngay cả đối với các tệp tĩnh. Điều này làm lãng phí các kết nối vì Apache sẽ giữ cho chúng mở và khi bạn có nhiều lưu lượng, các kết nối của bạn sẽ bị làm chậm ngay cả khi chúng không được sử dụng.

Theo mặc định, Apache lắng nghe các yêu cầu trên cổng 80 là cổng web mặc định. Đầu tiên chúng ta sẽ thực hiện các thay đổi đối với các tệp tin conf và máy chủ ảo Apache để nghe trên cổng 8080.

Cấu hình Apache

httpd.conf

đặt KeepAlive thành tắt

cổng.

NameVirtualHost *:8080
Listen 8080

Máy chủ ảo trên mỗi trang web

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

Bạn cũng nên cài đặt mod_rpaf để nhật ký của bạn sẽ chứa địa chỉ IP thực của khách truy cập. Nếu không nhật ký của bạn sẽ có 127.0.0.1 làm địa chỉ IP ban đầu.

Cấu hình Nginx

Trên Debian bạn có thể sử dụng kho để cài đặt nhưng chúng chỉ chứa phiên bản 0.6.33. Để cài đặt phiên bản mới hơn, bạn phải thêm các gói backport lenny

$ nano /etc/apt/sources.list

Thêm dòng này vào tập tin deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

Thêm vào đây vào tập tin:

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

Ban hành các lệnh sau để nhập khóa từ backports.org để xác minh các gói và cập nhật cơ sở dữ liệu gói của hệ thống của bạn:

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

Bây giờ cài đặt với apt-get

apt-get install nginx

Điều này dễ dàng hơn nhiều so với biên dịch từ nguồn.

Cấu hình tập tin và máy chủ của Nginx

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

Bây giờ bạn sẽ cần phải thiết lập lưu trữ ảo Nginx của bạn. Tôi thích sử dụng phương thức kích hoạt trang web với mỗi sym host v được liên kết với một tệp trong thư mục có sẵn của trang.

$ 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

mặc định

Ghi chú:

Cài đặt bộ đệm tĩnh trong các tệp sau sẽ chỉ hoạt động nếu plugin tích hợp bộ đệm bộ đệm proxy Nginx được bật.

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

Trên mỗi trang web WordPress conf (Đối với nhiều trang web, bạn sẽ chỉ cần một 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;
        }

        }

CDN tự lưu trữ

Đối với CDN tự lưu trữ của bạn, bạn chỉ cần thiết lập nó để phục vụ các tệp tĩnh mà không cần qua 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;
        }

    }

Bây giờ bắt đầu các máy chủ

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

Kết quả điểm chuẩn

Trên băng ghế dự bị Apache, thiết lập này về mặt lý thuyết có thể phục vụ 1833,56 yêu cầu mỗi giây

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

văn bản thay thế


1
+ Wow, điều này thật ấn tượng nhưng hiện tại tôi sẽ thích bỏ qua thiết lập nginx vì nó sẽ làm cho thiết lập máy chủ quá phức tạp.
sorin

Tôi muốn làm theo hướng dẫn của bạn về lưu trữ VPS của tôi. Nhưng tôi sợ nếu có bất kỳ vấn đề nào có thể xảy ra, nếu tôi làm gì sai. Tôi chưa làm điều đó sớm hơn. Tôi có thể làm điều đó không?
dùng391

1
Cảm ơn. Nghiêm túc hữu ích. Tôi sẽ cố gắng này. Tôi ước tôi có thể sửa đổi điều này nhiều hơn một lần :)
Nasir

4

Sử dụng một không gian web với Ram tối thiểu 64 MB cho Multisite và sử dụng APC và Memcached trên Apache, bộ đệm không tĩnh và bạn có thể sử dụng tất cả các chức năng WP mà không gặp vấn đề gì. Bạn quét qua PageSpeed ​​cũng đọc các tùy chọn khác, đã được mã hóa trong chủ đề. Bộ đệm có thể làm rất tốt, nhưng không thể sửa chữa một chủ đề hoặc plugin xấu. Một giải pháp khác là sử dụng tên miền phụ không có cookie như CDN trong WordPress. Thêm phần này vào wp-config.php cho Cookies chỉ trên tên miền, không phải tên miền phụ.

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

Bây giờ hãy thiết lập các hàm mới trong hàm.php của chủ đề hoặc viết một plugin để thay thế nội dung tĩnh dạng đường dẫn thành tên miền phụ, CDN tùy chỉnh của bạ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 );
}

bây giờ là hàm cho đường dẫn mẫu và biểu định kiểu

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

Bây giờ hãy đọc Tốc độ trang trên các URL CDN tĩnh phía trước mà không cần cookie.

Đồng thời thêm nguồn theo dõi vào .htaccess cho khối nội dung công khai khối:

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

Vui lòng sử dụng chức năng, cũng là ví dụ và bạn có thể viết giải pháp của mình với ý tưởng của tôi.


0

Ngăn xếp máy chủ web

Chủ yếu giữ mọi hoạt động trong bộ nhớ!

  • CPU hiện đại, băng thông bộ nhớ cao vì WordPress chủ yếu là sao chép bộ nhớ, thời gian truy cập đĩa phụ msec, hãy thử UpCloud!
  • Lớp ảo hóa mỏng, hãy thử UpCloud! Tránh xa các nhà cung cấp phổ biến, phi doanh nghiệp
  • Hệ điều hành nhanh: Không có systemd, Đủ entropy, Cân bằng IRQ, Sử dụng bộ nhớ thấp
  • Chặn kẻ tấn công búa: Fail2ban, chặn mạng lưới vĩnh viễn
  • Anycast DNS
  • Máy chủ web nhanh: MPM sự kiện Apache
  • CDN kết nối song song với tốc độ như RAM (Amazon CloudFront)
  • SSL tốc độ cao: Chứng chỉ ECDSA, Nguồn Entropy, TLS1.2, Mật mã cho AES-NI, bộ đệm phiên SSL, dập ghim OCSP, HTTP / 2
  • PHP hiện đại với OPcache, được kết nối thông qua FastCGI
  • Cài đặt Lean WordPress: chỉ các plugin được kiểm tra và tối thiểu
  • Redis bộ nhớ cache đối tượng trong bộ nhớ
  • TokuDB (cây gãy xương) động cơ MariaDB
  • Tối ưu hóa tài nguyên
  • Cắt trên JavaScripts
  • Theo dõi liên tục: Pingdom, HetrixTools

Tất cả kiến ​​thức của tôi là mã nguồn mở https://github.com/szepeviktor/debian-server-tools

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.