WP+Apache+Nginx+Varnish

InoHacker
На сайте с 18.10.2009
Offline
75
1162

Доброго времени суток.

Пытаюсь сейчас разобраться с оптимизацией скорости загрузки своего портальчика на WP. Возник вопрос. Но для начала - исходные данные:

Есть сервак (Debian). Беком работает Индеец, фронтом - Nginx. Недавно прикрутил еще Varnish. Изначально (до варниша) в nginx.conf было прописано следующие:


server {
listen ******:80;
server_name *******;

location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass http://*******:8080;
proxy_redirect http://*****:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://******:8080;
proxy_redirect http://*********:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
root *********;
access_log *********;
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://******:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}

Соответственно поставил варниш и изменил конфиг на такой:


server {
listen 80;
server_name ********;

access_log ********;


location / {

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass_header Set-Cookie;

proxy_pass http://localhost:6081;

}

Теперь, собственно, вопрос. После такого финта ушами, я не заметил, что сайтец стал грузиться быстрее. Чтобы не быть голословным: до варниша скорость загрузки (по перф-сайт) ~ 1,9 c, после - 1,2с, что не есть сильно быстрее =(

Прошу сильно не пинать, я только-только начал углубляться в эти дебри =)

P.S. Установлен плагин W3 Total Cash, в настройках Варниш прописал ИПИ своего сервера (без порта).

P.P.S Забыл добавить. Конфиг Варниша скопировал из блога какого то буржуйскоготоварища, который вещал как раз про настройки для WP:


backend default {
set backend.host = "localhost";
set backend.port = "8080";
.first_byte_timeout = 300s
}

acl purge {
"localhost";
}

sub vcl_recv {

set req.grace = 6h;

if (req.request == "PURGE") {

if(!client.ip ~ purge) {

error 405 "Not allowed.";

}

purge("req.url ~ ^" req.url "$ && req.http.host == "req.http.host);

}

if (req.url ~ ".(jpg|png|gif|gz|tgz|bz2|lzma|tbz)(?.*|)$") {

remove req.http.Accept-Encoding;

} elsif (req.http.Accept-Encoding ~ "gzip") {

set req.http.Accept-Encoding = "gzip";

} elsif (req.http.Accept-Encoding ~ "deflate") {

set req.http.Accept-Encoding = "deflate";

} else {

remove req.http.Accept-Encoding;

}

if (req.url ~ "wp-(login|admin)") {

return (pass);

}

if (req.request != "GET" && req.request != "HEAD") {

return (pass);

}

unset req.http.cookie;

if (req.url ~ ".(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent)(?.*|)$") {

unset req.http.Authenticate;

unset req.http.POSTDATA;

set req.request = "GET";

set req.url = regsub(req.url, "?.*$", "");

return (lookup);

}

}

sub vcl_pipe {

set bereq.http.connection = "close";

if (req.http.X-Forwarded-For) {

set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;

} else {

set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");

}

}


sub vcl_pass {

set bereq.http.connection = "close";

if (req.http.X-Forwarded-For) {

set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;

} else {

set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");

}

}


sub vcl_fetch {

set beresp.ttl = 1h;

set req.grace = 6h;

if (req.url ~ "wp-(login|admin)") {

return (pass);

}

unset beresp.http.set-cookie;

if (req.url ~ ".(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent|swf)$") {

set beresp.ttl = 24h;

}

}

sub vcl_deliver {

if (obj.hits > 0) {

set resp.http.X-Cache = "HIT";

set resp.http.X-Cache-Hits = obj.hits;

} else {

set resp.http.X-Cache = "MISS";

}

}

Магазин аккаунтов с балансом Litres,DNS,Ozon,Rotapost и еще 50+ других сервисов тут - vk.cc/7QK0Sk
P
На сайте с 16.03.2009
Offline
144
#1

Поставьте nginx, php-fpm

На wp - плагин wp super cache

Настройте плагин, через реврайты (в конфиге nginx)

Например:

server {
listen 80;
server_name xxx.ru;
root /var/www;

index index.php index.html index.htm;

gzip_static on;

if (-f $request_filename) {
break;
}

set $supercache_file '';
set $supercache_uri $request_uri;

if ($request_method = POST) {
set $supercache_uri '';
}

if ($query_string) {
set $supercache_uri '';
}

if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
set $supercache_uri '';
}

if ($supercache_uri ~ ^(.+)$) {
set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
}

if (-f $document_root$supercache_file) {
rewrite ^(.*)$ $supercache_file break;
}

if (!-e $request_filename) {
rewrite . /index.php last;
}

location ~ /\.ht {
deny all;
}

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
access_log off;
expires 3d;
}

location ~ \.php$ {
fastcgi_pass unix:/tmp/www.sock;
include fastcgi_params;
try_files $uri $uri/ =404;
}
}

Так же это можно сделать и в связке apache+nginx, в htaccess или правилами nginx (они выше)

Посмотрите - хватает ли памяти mysql (mysqltuner)

M
На сайте с 16.09.2009
Offline
278
#2

ппц какой-то. Автор, завязывайте копировать конфиги из всяких говноблогов.

Если Вы _не понимаете_ что делает программа - оставьте установку таковой специалистам. Иначе потом огребете таких проблем с "портальчиком" - до которым недостаток "оптимизаций" покажется цветочками.

Вот элементарные советы:

1) убедитесь, что все было сделано на бакенде для ускорения отработки скриптов (напр., настройки mysql, opcode-кешер PHP, настройки кеширования на клиенте типа Expires)

2) недостаточно - попробуйте помимо простого проксирования nginx также организовать кеширование

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий