Kinerja WordPress dan Caching Stack saya
Ini adalah tumpukan kinerja WordPress yang hebat untuk server tunggal atau VPS rendah kisaran menengah. Saya mengklasifikasikan kisaran menengah sebagai inti tunggal dengan memori sekitar 1G dan drive yang cukup cepat.
Di komputer Anda, ini akan mampu melayani lebih dari 10 ribu tampilan halaman per jam
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 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>
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 proxy 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 yang Diinangi Sendiri
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/