WordPress и кэш nginx
Сегодня случайно обнаружил, что в блоге отвалилась авторизация по 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_wordpress_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»;
В случае с использованием в качестве бэкэнда php-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.php
location /wp-comments-post.php {
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"
а я думал, что ты премодерацию включил, когда три раза добавить каммент не удалось :)
Ну премодерация тоже бывает, но это был не тот случай.
Проверка, похоже я один локейшен забыл
Точно забыл, подправил заметку.
Зачем плодить локейшены?
location (/wp-login.php|/openid|/wp-comments-post.php) {
Это для наглядности так написано.
В реале так как ты показал.
Оставить комментарий