Пример конфига nginx(php-fpm)+Boost

Пнд, 16/09/2013 - 15:07

Выложил конфиг для виртуального сервера 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 @drupal;
        }
 
        location / {
                #вместо отсылки к друпалу, сперва идем в кеш
                try_files $uri @boost;
        }

        #основные правила для Boost
        location @boost {
                #модуль boost выставляет залогиненым юзерам кукис DRUPAL_UID, если находим его, игнорируем кеш
                if ($http_cookie ~ "DRUPAL_UID" ) {
                        return 405;
                }
                #кешировать результаты отправки форм бесполезно, потому игнорируем кеш, если видим пост запрос.
                if ($request_method = "POST" ) {
                        return 405;
                }
                #в случае 405 кода возврата передаем управление друпалу.
                error_page 405 = @drupal;

                #запрещаем браузеру кеширование
                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 @drupal;
        }
        ##### BOOST END #####

        #тут пример для php-fpm через сокет, у Вас тут может быть что угодно, в т.ч. проксируемый апач(в данном случае суть в том, чтобы отдавать кеш сразу через nginx, без участия apache).
        location @drupal {
                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;
        }
}

1 Спасибо

Комментарии

Аватар пользователя tlito
1 год 6 months назад tlito #

у меня перестал работать буст нормально на моей новой впс, хотя на виртуальном хостинге работал нормально. кэш-файлы создаются каждый раз когда я обновляю страницу от анонима. но друпал не использует их, то есть на странице в коде нет инфо что эта страница генерирована бустом. что делать?
подробнее и мой конфиг тут https://www.drupal.org/node/2620080

0 Спасибо
Аватар пользователя pr0g
1 год 2 months назад pr0g #

Спасибо за информацию.

0 Спасибо