Мій стек продуктивності WordPress та кешування
Це чудовий стек продуктивності WordPress для одного сервера низького та середнього діапазону або VPS. Я класифікую середній діапазон як одноядерний, що має близько 1 Г пам'яті і досить швидкі диски.
У вашій коробці ця послуга зможе обслуговувати понад 10 тис. Переглядів сторінок на годину
Серверний стек
- Linux - або Debian Lenny, або Ubuntu
- Nginx - Налаштовується як кеш-файл статичного зворотного проксі
- Apache - Apache буде обробляти PHP, завантажений Nginx на альтернативному порті
- MySql - вимагає WP, переконайтеся, що ви працюєте з останньою стабільною версією
- PHP - остання стабільна версія 5,2 або 5,3 відділення
PHP кеш
- APC - Налаштуйте його за допомогою mmap-пам’яті та розміром shm принаймні 128М
WordPress Plugin стек продуктивності
- Інтегратор кешу проксі-сервера Nginx
- W3 Total Cache - Встановлення кешу сторінки на розширений диск, мінімізація на диску та об'єкт і db в APC.
- Self Hosted CDN - Створіть 4 псевдоніми імен, які вказують на домен на сервері, створені просто для подання статичного файлу
За допомогою W3 Total Cache ми використовуємо диск для кешування сторінок і мінімізуємо, оскільки Nginx дуже швидко обслуговуватиме наші статичні файли.
Як налаштувати Nginx для обслуговування статичних файлів та передачі PHP Apache
Проблема лише з використанням Apache полягає в тому, що він відкриває з'єднання і звертається до php на кожен запит, навіть для статичних файлів. Це втрачає зв'язки, оскільки Apache буде тримати їх відкритими, і коли у вас багато трафіку, ваші з’єднання будуть забиті, навіть якщо вони не використовуються.
За замовчуванням Apache прослуховує запити на порт 80, який є веб-портом за замовчуванням. Спочатку ми збираємося внести зміни до нашого Apache conf та файлів віртуальних хостів для прослуховування через порт 8080.
Apache Config
httpd.conf
вимкніть KeepAlive на вимкненому
ports.conf
NameVirtualHost *:8080
Listen 8080
Віртуальний хост сайту
<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>
Вам також слід встановити mod_rpaf, щоб ваші журнали містили справжні ip адреси ваших відвідувачів. Якщо ні, ваші журнали матимуть 127.0.0.1 як вихідну ip адресу.
Налаштування Nginx
На Debian ви можете використовувати сховища для установки, але вони містять лише версію 0.6.33. Щоб встановити більш пізню версію, вам потрібно додати пакети із заднім числом
$ nano /etc/apt/sources.list
Додайте цей файл у файл deb http://www.backports.org/debian lenny-backports main
$ nano /etc/apt/preferences
Додайте у файл таке:
Package: nginx
Pin: release a=lenny-backports
Pin-Priority: 999
Виконайте такі команди, щоб імпортувати ключ з backports.org для перевірки пакунків та оновлення бази даних вашої системи:
$ wget -O - http://backports.org/debian/archive.key | apt-key add -
$ apt-get update
Тепер встановіть з apt-get
apt-get install nginx
Це набагато простіше, ніж компілювати з джерела.
Конфігурація файлів 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/*;
}
Тепер вам потрібно буде налаштувати свій віртуальний хостинг Nginx. Мені подобається використовувати метод з підтримкою сайтів із кожним символом хоста v, пов’язаним з файлом у доступній для сайтів каталозі.
$ 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
Примітка:
Налаштування статичного кешу в наступних файлах працюватимуть лише тоді, коли плагін інтегратора кеша проксі 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;
}
За конфіденційність сайту WordPress (для веб-сайтів вам знадобиться лише один 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 конф. Конф
Для власної конфіденційної конфіденційності CDN вам потрібно лише налаштувати її для обслуговування статичних файлів без пропуску проксі
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;
}
}
Тепер запустіть сервери
$ /etc/init.d/apache2 restart
$/etc/init.d/nginx start
Результати порівняння
На лавці Apache ця установка теоретично може обслуговувати 1833,56 запитів в секунду
$ ab -n 1000 -c 20 http://yoursite.com/