Nginx все активней захватывает рынок веб-серверов за счет быстрой отдачи статистических файлов. Все динамические запросы нужно пересылать на обработку соответствующим модулям. Для PHP лучше использовать PHP-fpm, и полностью отказаться от использования apache.

Ниже инструкция-описание моего конфига для nginx.

Действия с WordPress

Для работы WP Super Cache в паре с nginx нужно настроить ЧПУ.

nginx Compatibility

Старые версии WordPress тесно связаны с Apache, например для работы ЧПУ проверяется наличие mod_rewrite, которого в nginx отродясь не было. Для борьбы с этой и другими проблемами нужно поставить плагин nginx Compatibility. Если у вас стоит PHP5, то не нужно активировать плагин сразу, а перейти к списку плагинов и активировать версию для PHP5. Настраивать ничего не нужно.

Начиная с версии 3.3.1 (может быть и раньше) WordPress работает под nginx самостоятельно.

WP Super Cache

Для кеширования я использую WP Super Cache, самое главное, что сгенерированные страницы он складывает по папочкам, а оттуда их возьмет nginx, даже не вспоминая про PHP.

Особых хитростей в настройке нет, но я предпочитаю ставить время жизни кеша побольше, все равно в случае обновления страницы WP Supercache убирает старую, а комментарии прекрасно отображаются через Disqus.

Настройка Nginx

В конце файла конфигурации есть такая строчка

Select Code
include /etc/nginx/conf.d/*.conf;

Это значит, что при старте nginx загружает все файлы с окончанием .conf, хранящиеся в папке /etc/nginx/conf.d/. Для удобства я для каждого домена создаю отдельный файл, а в него уже вписываю все настройки.

Постоянный редирект (301) с WWW на non-WWW

Вместо хитрых условий и проверок я использую отдельную запись server

Select Code
server {
listen 80;
server_name www.tigors.net ;

rewrite ^/(.*)$ http://tigors.net/$1 permanent;

}

Параметр permanent заставляет сервер выдавать код ответа 301.

Отдача картинок

Я ранее написал как вынести картинки NextGEN Gallery на отдельный домен, теперь пришло время это использовать.

Select Code
server {
listen 80;
server_name g.tigors.net;
expires 30d;
root /--/wp-content/gallery/;
}

Основная настройка nginx

Ниже приведен один большой блок server, он пытается взять страницу из кеша, если ее нет, то запускает PHP. Кроме того рекомендую использовать модуль ngx_http_gzip_static, который отлично работает в паре с WP Super Cache.

Select Code
server {
listen 80;
server_name tigors.net;
root /--/;

 

location / {

 

#  ,   .    ( )      30 .
#          .

if (-f $request_filename) {
expires 30d;
break;
}

 

#  ,  .

#   ,      PHP-fcgi  .

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

#   POST,   .

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

#   ,   .

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

#     wordpress_logged_in_,    

if ($http_cookie ~* "wordpress_logged_in_" ) {
set $supercache_uri '';
}

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

#    ,    .
if (-f /--$supercache_file) {
rewrite ^(.*)$ $supercache_file break;
}

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

#    .php   php-fastcgi

location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /--/$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}

Результаты

Если страница сгенирирована и сохранена в кеше, то php не вызывается. Я для эксперимента даже выключал php-fastcgi, nginx выдавал страницу без проблем.

Минус в том, что вызовов PHP настолько мало, что рушится вся работа WP-Cron. Даже пришлось написать отдельно запуск WP-Cron по Cron.

После таких нехитрых действий скорость загрузки некоторых страниц в Google Analytics существенно упала.