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/