내 WordPress 성능 및 캐싱 스택
이것은 중저역 단일 서버 또는 VPS에 가장 적합한 WordPress 성능 스택입니다. 나는 약 1G의 메모리와 상당히 빠른 드라이브로 미드 레인지를 단일 코어로 분류하고 있습니다.
서버 스택
- 리눅스-데비안 레니 또는 우분투
- Nginx-리버스 프록시 정적 파일 캐시로 구성
- Apache-Apache는 대체 포트에서 Nginx가 오프로드 한 PHP를 처리합니다.
- MySql-WP에 필요합니다. 최신 안정 버전을 실행하십시오.
- PHP-최신 안정 버전 5.2 또는 5.3 분기
PHP 캐시
- APC-mmap 메모리 및 최소 128M의 shm 크기로 구성
워드 프레스 성능 플러그인 스택
- Nginx 프록시 캐시 통합 기
- W3 Total Cache-페이지 캐시를 디스크 향상, 디스크로 축소, 개체 및 db를 APC로 설정
- 자체 호스팅 CDN-정적 파일을 제공하도록 설정된 서버에서 도메인을 가리키는 4 개의 cname 별명 작성
W3 Total Cache에서는 Nginx가 정적 파일을 매우 빠르게 제공하기 때문에 페이지 캐시에 디스크를 사용하고 축소합니다.
정적 파일을 제공하고 PHP를 Apache로 전달하도록 Nginx를 구성하는 방법
Apache 만 사용하는 경우의 문제점은 연결을 열고 정적 파일에 대한 모든 요청에서 PHP를 공격한다는 것입니다. 아파치는 연결 상태를 유지하고 많은 트래픽이 발생하면 연결을 사용하지 않더라도 연결이 끊어지기 때문에 연결이 낭비됩니다.
기본적으로 Apache는 기본 웹 포트 인 포트 80에서 요청을 청취합니다. 먼저 포트 8080에서 수신 대기하도록 Apache conf 및 가상 호스트 파일을 변경합니다.
아파치 설정
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>
또한 로그에 방문자의 실제 IP 주소가 포함되도록 mod_rpaf 를 설치해야 합니다. 그렇지 않으면 로그는 원래 IP 주소로 127.0.0.1이됩니다.
Nginx 구성
데비안에서는 리포지토리를 사용하여 설치할 수 있지만 버전 0.6.33 만 포함되어 있습니다. 이후 버전을 설치하려면 lenny 백 포트 패키지를 추가해야합니다
$ 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 conf 및 서버 파일 설정
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 호스트 sym과 함께 사이트 사용 방법을 사용하고 싶습니다.
$ 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;
}
워드 프레스 사이트 conf 당 (여러 사이트의 경우 하나의 가상 호스트 만 필요)
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 conf
자체 호스팅 CDN conf의 경우 프록시 패스없이 정적 파일을 제공하도록 설정하기 만하면됩니다.
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 Bench에서이 설정은 이론적으로 초당 1833.56 요청을 처리 할 수 있습니다.
$ ab -n 1000 -c 20 http://yoursite.com/