Quelle configuration de plug-in de mise en cache recommandez-vous et pourquoi sous les hypothèses suivantes:
www.
(cookies)Détails: J'utilise le plugin Firefox Google Page Speed pour essayer d'optimiser la vitesse du site.
Veuillez également ne pas utiliser de directives génériques, comme des images plus petites.
Soyons justes, utiliser plus d'un plugin de cache vous apportera plus de problèmes qu'il n'en résoudra, essayez donc de donner une approche simple.
Réponse de base à "quel plugin" serait probablement W3 Total Cache . C'est actuellement l'un des plugins les plus fonctionnels et les plus développés. Cependant, la chaîne de performances complète est bien plus longue que le plugin WordPress seul peut gérer.
Un bon début serait un plugin de cache statique (comme W3) avec un cache basé sur la mémoire opcode comme APC .
Mais à partir de là, vous pouvez faire beaucoup plus (et beaucoup plus complexe), comme des réseaux de distribution de contenu, des serveurs Web alternatifs, etc.
Il s'agit de la meilleure pile de performances WordPress pour un serveur unique ou un SMV de moyenne et basse gamme. Je classe le milieu de gamme dans un seul cœur avec environ 1 G de mémoire et des lecteurs assez rapides.
Avec W3 Total Cache, nous utilisons un disque pour le cache de pages et une réduction de la taille car Nginx servira nos fichiers statiques très rapidement.
Le problème avec Apache seul est qu’il ouvre une connexion et frappe php à chaque requête, même pour des fichiers statiques. Cela gaspille les connexions, car Apache les maintient ouvertes et, lorsque vous avez beaucoup de trafic, vos connexions s'enlisent même si elles ne sont pas utilisées.
Par défaut, Apache écoute les demandes sur le port 80, qui est le port Web par défaut. Nous allons d’abord apporter des modifications à nos fichiers de configuration hôte et hôtes virtuels Apache afin d’écouter le port 8080.
httpd.conf
désactiver KeepAlive
ports.conf
NameVirtualHost *:8080
Listen 8080
Hôte virtuel par site
<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>
Vous devez également installer mod_rpaf pour que vos journaux contiennent les adresses IP réelles de vos visiteurs. Sinon, vos journaux auront 127.0.0.1 comme adresse IP d'origine.
Sur Debian, vous pouvez utiliser les dépôts pour l’installation, mais ils ne contiennent que la version 0.6.33. Pour installer une version ultérieure, vous devez ajouter les packages de lenny backports
$ nano /etc/apt/sources.list
Ajouter cette ligne au fichier deb http://www.backports.org/debian lenny-backports main
$ nano /etc/apt/preferences
Ajoutez ce qui suit au fichier:
Package: nginx
Pin: release a=lenny-backports
Pin-Priority: 999
Exécutez les commandes suivantes pour importer la clé de backports.org afin de vérifier les packages et de mettre à jour la base de données de packages de votre système:
$ wget -O - http://backports.org/debian/archive.key | apt-key add -
$ apt-get update
Maintenant, installez avec apt-get
apt-get install nginx
C'est beaucoup plus facile que de compiler à partir des sources.
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/*;
}
Vous devez maintenant configurer votre hébergement virtuel Nginx. J'aime utiliser la méthode adaptée aux sites avec chaque v Host sym lié à un fichier du répertoire 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
Remarque:
Les paramètres de cache statique dans les fichiers suivants ne fonctionneront que si le plug-in d'intégrateur de cache proxy Nginx est activé.
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;
}
Par site WordPress conf (Pour un site multiple, vous n’avez besoin que d’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;
}
}
Config CDN auto-hébergé
Pour votre conférence CDN auto-hébergée, il vous suffit de la configurer pour servir des fichiers statiques sans passe 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;
}
}
Maintenant démarrez les serveurs
$ /etc/init.d/Apache2 restart
$/etc/init.d/nginx start
Sur Apache Bench, cette configuration peut théoriquement servir 1833,56 requêtes par seconde.
$ ab -n 1000 -c 20 http://yoursite.com/
Utilisez un espace Web avec un minimum de 64 Mo de Ram for Multisite et utilisez APC et Memcached sur Apache, le cache n'est pas statique et vous pouvez utiliser toutes les fonctions WP sans problèmes. Vous numérisez via PageSpeed lu également d'autres options, il était codé dans le thème. Un cache peut faire un excellent travail, mais ne peut pas réparer un mauvais thème ou un plugin. Une autre solution consiste à utiliser des sous-domaines sans cookies en tant que CDN dans WordPress. Ajoutez ceci au fichier wp-config.php pour les cookies uniquement sur le domaine, pas le sous-domaine.
define( 'COOKIE_DOMAIN', 'example.com' );
Maintenant, définissez de nouvelles fonctions dans le fichier functions.php du thème ou écrivez un plug-in pour remplacer le chemin d'accès du contenu statique de vos sous-domaines, votre CDN personnalisé.
// 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 );
}
maintenant la fonction pour template et 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' );
Maintenant, lisez Page Speed sur les URL CDN statiques frontales sans cookies.
Ajoutez également le source de suivi au .htaccess pour le bloc dupliquer le contenu:
##
# 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]
S'il vous plaît utiliser la fonction, est également des exemples et vous pouvez écrire vos solutions avec mes idées.
Gardez essentiellement chaque opération en mémoire!
Toutes mes connaissances sont open-source https://github.com/szepeviktor/debian-server-tools