WordPress и кэш nginx

Дата: 6.12.2009

Рубрики: Technology, Про блог

Сегодня случайно обнаружил, что в блоге отвалилась авторизация по OpenID при добавлении комментариев. Беглый анализ показал, что виной тому, подключенное недавно по совету коллеги кэширование в nginx (у коллеги кстати такая авторизация тоже не работает по тем же причинам).

Суть в следующем, включение кэша позволяет nginx'у складывать на диск в виде файликов все что ему отдал бэкэнд (в моем случае apache) и далее отдавать эти файлики по запросам пользователей, что, естественно, быстрее чем спрашивать у бэкэнда и позволяет существенно сэкономить серверные мощности.

Настраивается это примерно таким образом.

Сначала инициализируется кэш

proxy_cache_path /var/nginx_cache levels=1:2\
keys_zone=cache_one:10m;

А потом для нужно сайта указывается что будем кэшировать путем добавления вот таких примерно директив к корневому location

proxy_cache cache_one;

proxy_cache_key  $host|$request_uri|$cookie__logged_in_<хеш>\
>|$cookie_fcauth<хеш>|$cookie_wp-settings-2|$cookie_wp-settings-time-2;
proxy_cache_valid 200 301 10m;
proxy_cache_valid 302 10h;
proxy_hide_header «Set-Cookie»;
proxy_ignore_headers «Cache-Control» «Expires»;

В случае с использованием в качестве бэкэнда -fpm proxy_* меняется на fastcgi_*.

Так вот при такой настройке запрос на авторизацию по OpenID приводит к простому открытию главной страницы блога из кэша, а нужно чтобы он передавался на обработку в apache. Соответсвенно исключаем его из кэширования вот так

location /openid {
proxy_pass http://IP:порт;
proxy_redirect http://blog.megaded.ru:порт/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

И еще вот так исключаем из кэширования файл wp-comments-post.

location /wp-comments-post. {
proxy_pass http://IP:порт;
proxy_redirect http://blog.megaded.ru:порт/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

Все, хаваем фан.

Уважаемые посетители с OpenID, Вы снова Welcome!

Связанные записи

Метки: , ,

6 комментариев на запись "WordPress и кэш nginx"

6 декабря 2009

а я думал, что ты премодерацию включил, когда три раза добавить каммент не удалось :)

6 декабря 2009

Ну премодерация тоже бывает, но это был не тот случай.

6 декабря 2009

Проверка, похоже я один локейшен забыл

6 декабря 2009

Точно забыл, подправил заметку.

6 декабря 2009

Зачем плодить локейшены?

location (/wp-login.php|/openid|/wp-comments-post.php) {

7 декабря 2009

Это для наглядности так написано.

В реале так как ты показал.

Оставить комментарий

Имя:
E-mail:
Сайт: