Выложил конфиг для виртуального сервера nginx(обычно они живут там - /etc/nginx/sites-available), обратить внимание стоит на то, что содержится между ##### BOOST ##### и ##### BOOST END #####, все остальное там чисто для наглядности. Прикручивать Boost к nginx имеет смысл только, если в ТЗ стоит пункт "Очистка кеша сразу при добавлении материала", про настройку самого буста и vfs писать ничего не буду, информации по этому поводу и без того много, а вот с конфигами nginx через php-fpm беда.
server {
listen 80;
server_name example.com;
rewrite ^(.*) http://www.example.com$1 permanent;
}
server {
server_name www.example.com;
root /var/www;
listen 80;
index index.php;
#как-то не задумывался, зачем оно надо
location = /favicon.ico {
log_not_found off;
access_log off;
}
#для этого файла нужно отдельное разрешение, т.к. дальше идет запрет на вывод всех txt
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
#drush backup
location = /backup {
deny all;
}
# закрываем доступ куда не попадя
location ~* \.(txt|log|inc|module|install|info|make|po|sh|profile)$ {
deny all;
}
##### BOOST #####
#следующее правило необходимо для поддержки кеша css и js(если используется) через BOOST, правда, на мой взгляд, смысл в этом есть только, если используете vfs для хранения кеша.(у меня оно не используется, так что не могу гарантировать работоспособность), суть простая - если идет запрос к js или css, ищем его в кеше, если нет, отправляемся по обычному пути, если и там нет, отправляем к друпалу.
location ~* \.(css|js)$ {
try_files /cache/perm/$host${uri}_.css /cache/perm/$host${uri}_.js /cache/$host/0$uri.html $uri [user=drupal]drupal[/user];
}
location / {
#вместо отсылки к друпалу, сперва идем в кеш
try_files $uri [user=boost]boost[/user];
}
#основные правила для Boost
location [user=boost]boost[/user] {
#модуль boost выставляет залогиненым юзерам кукис DRUPAL_UID, если находим его, игнорируем кеш
if ($http_cookie ~ "DRUPAL_UID" ) {
return 405;
}
#кешировать результаты отправки форм бесполезно, потому игнорируем кеш, если видим пост запрос.
if ($request_method = "POST" ) {
return 405;
}
#в случае 405 кода возврата передаем управление друпалу.
error_page 405 = [user=drupal]drupal[/user];
#запрещаем браузеру кеширование
add_header Expires "Sun, 19 Nov 1978 05:00:00 GMT";
add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
#ищем кеш буста, если его нет, отдаем управление друпалу, GET переменные учитываются(собственно именно эта строчка отличается от того, что можно найти в гугле).
try_files /cache/normal/$host${uri}_$args.html /cache/$host/0$uri.html /cache/$host/0${uri}/index.html [user=drupal]drupal[/user];
}
##### BOOST END #####
#тут пример для php-fpm через сокет, у Вас тут может быть что угодно, в т.ч. проксируемый апач(в данном случае суть в том, чтобы отдавать кеш сразу через nginx, без участия apache).
location [user=drupal]drupal[/user] {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 600;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
fastcgi_param SCRIPT_NAME /index.php;
}
#Выполнение обычного пыха, опять же у всех свое.
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
Комментарии
http://wiki.nginx.org/Drupal
https://github.com/perusio/drupal-with-nginx
у меня перестал работать буст нормально на моей новой впс, хотя на виртуальном хостинге работал нормально. кэш-файлы создаются каждый раз когда я обновляю страницу от анонима. но друпал не использует их, то есть на странице в коде нет инфо что эта страница генерирована бустом. что делать?
подробнее и мой конфиг тут https://www.drupal.org/node/2620080
Спасибо за информацию.