Как настроить кеширование в WordPress с помощью плагина W3 Total Cache и Nginx

В сегодняшней статье мы расскажем вам как настроить кеширование в WordPress с помощью плагина W3 Total Cache и Nginx. Если вы используете easyengine, то можно пропустить всю статью, использовав лишь команду:

ee site create example.com --w3tc

Предполагается:

  1. Что вы уже установили PHP, MySQL, Nginx & Postfix
  2. Что вы уже установили свежую копию WordPress или же перенесли существующую на текущий сервер

Основываясь на этих предположениях, мы сразу перейдем к части настройки WordPress-Nginx.

Стандартная конфигурация WordPress-Nginx с W3 Total Cache:

Плагин W3 Total Cache предлагает огромное количество опций. Мы рекомендуем использовать нижеследующие:

  • Page Cache – Disk Enhanced
  • Minify – Отключите это, если только вы не уверены на 100%, что ваша тема/плагины будут корректно ее поддерживать. Автоматическая минификация крайне редко работает правильно.
  • Database Cache – Memcache
  • Object Cache – Memcache
  • Browser Cache – Отключить
  • CDN – Вы можете использовать любой CDN. Рекомендуется Amazon CDN либо Cloudflare.

Как вы успели заметить, мы выделили только 2 опции. И именно эти две опции мы будем обрабатывать в конфигурации.

server {
	server_name example.com www.example.com;

	access_log   /var/log/nginx/example.com.access.log;
	error_log    /var/log/nginx/example.com.error.log debug;

	root /var/www/example.com/htdocs;
	index index.php;

	set $cache_uri $request_uri;

	# POST запросы и ссылки со строками запросов всегда отдаем PHP
	if ($request_method = POST) {
		set $cache_uri 'null cache';
	}
	if ($query_string != "") {
		set $cache_uri 'null cache';
	}

	# Не кешируем сыслки, которые содержат следующие сегменты
	if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
		set $cache_uri 'null cache';
	}

	# Не используем кеш для залогиненных пользователей либо недавних комментаторов
	if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
		set $cache_uri 'null cache';
	}

	# Используем закешированные или актуальные файлы, если они существуют, иначе же отдаем запрос на WordPress
	location / {
		try_files /wp-content/cache/page_enhanced/${host}${cache_uri}_index.html $uri $uri/ /index.php?$args ;
	}

        location ~ ^/wp-content/cache/minify/[^/]+/(.*)$ {
                try_files $uri /wp-content/plugins/w3-total-cache/pub/minify.php?file=$1;
        }

	location = /favicon.ico { log_not_found off; access_log off; }
	location = /robots.txt  { log_not_found off; access_log off; }

	location ~ \.php$ {
		try_files $uri =404;
		include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;
	}

	# Кешируем статические файлы так долго, насколько это возможно
	location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
               expires max; log_not_found off; access_log off;
	}
}

Примечания:

  1. Для упрощения конфигурации мы не добавляли проверку на мобильные юзер-агенты. Лучше использовать адаптивный дизайн, нежели разрабатывать отдельный сайт для мобильных устройств.
  2. Вы не увидели в конфигурации специальных правил для минификации. Вышеприведенные правила будут обрабатывать минификацию W3 total без каких-либо изменений.

Не забудьте:

Всегда вначале тестируйте конфигурацию Nginx, а затем подгружайте её. Все изменения в конфиг Nginx должны сопровождаться следующими командами:

nginx -t && service nginx reload

Вот и все. Мы надеемся, что эта статья помогла вам настроить кеширование в WordPress с помощью плагина W3 Total Cache и Nginx.

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top