Всем доброго времени суток. Решили попробовать новую, стильную, модную, молодёжную технологию "Композитный сайт". Настроили nginx по инструкции. Вот такой конфиг получился:
Код
server {
server_name mysite.ru www.mysite.ru;
listen 8.8.8.8;
listen 8.8.8.8:443;
charset utf8;
# default path to cache file
set $test_file "bitrix/html_pages/$host$uri/index@$args.html";
set $storedAuth "";
set $usecache "";
# check user auth
if ( $cookie_BITRIX_SM_LOGIN != "" ) { set $storedAuth "A"; }
if ( $cookie_BITRIX_SM_UIDH != "" ) { set $storedAuth "${storedAuth}B"; }
if ( $cookie_BITRIX_SM_CC != "Y" ) { set $storedAuth "${storedAuth}C"; }
# check all conditions for enable composite
if ( $http_bx_action_type = "" ) { set $usecache "A"; }
if ( $request_method = "GET" ) { set $usecache "${usecache}B"; }
if ( $cookie_BITRIX_SM_NCC = "" ) { set $usecache "${usecache}C"; }
if ( $http_x_forwarded_scheme !~ "https" ){ set $usecache "${usecache}D"; }
if ( $storedAuth !~ "ABC" ) { set $usecache "${usecache}E"; }
## cache location
location ~* @.*\.html$ {
internal;
root /var/www/user/data/www/mysite.ru/cache;
}
location / {
root /var/www/user/data/www/mysite.ru;
proxy_pass http://8.8.8.8:81;
proxy_redirect http://8.8.8.8:81/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
if ( -f "$document_root/$test_file" ) { set $usecache "${usecache}F"; }
if ($usecache = "ABCDEF" ){ rewrite .* /$test_file last; }
gzip_min_length 1100;
}
location ~* ^(.*)\.php$ {
root /var/www/user/data/www/mysite.ru;
set $test_file "bitrix/html_pages/$host$1@$args.html";
if ( -f "$document_root/$test_file" ) { set $usecache "${usecache}F"; }
if ($usecache = "ABCDEF" ){ rewrite .* /$test_file last; }
proxy_pass http://www.mysite.ru:81;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
root /var/www/user/data/www/mysite.ru;
access_log /var/www/nginx-logs/user isp;
access_log /var/www/httpd-logs/mysite.ru.access.log ;
error_page 404 = @fallback;
}
location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ {
proxy_pass http://8.8.8.8:81;
proxy_redirect http://8.8.8.8:81/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
location @fallback {
proxy_pass http://8.8.8.8:81;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
include /usr/local/ispmgr/etc/nginx.inc;
ssl_certificate /var/www/httpd-cert/user/mysite.ru.crt;
ssl_certificate_key /var/www/httpd-cert/user/mysite.ru.key;
}
* - url и ip были заменены умышленно
Дополнительно из-за необходимости перенаправления URL с mysite.ru на www.mysite.ru был изменён стандартный .htaccess:
В итоге при авторизации (публичная часть сайта) авторизация проходит успешно (появляется админ. панель), но после следующего обновления\перезагрузки страницы, авторизация слетает. Причём судя по пустой папке /var/www/user/data/www/mysite.ru/cache и пустой (кроме конфиг файлов) папке /bitrix/html_pages композитный режим не заработал. Помогите пожалуйста, очень уж заманчивая технология.
Группа администраторов случайно не добавлена в настройках композита в "анонимные"? Если да, то система воспринимает её как подлежащую показу композитного сайта. А если композитная страница уже создана для неавторизованной группы... Ну, вы поняли, что происходит )))))
Касательно "не заработал" - кнопка появилась? Самый простой способ проверить заработал ли композит для конкретной страницы - неавторизованным юзером посмотреть есть ли кнопка. Иногда нужно обновить страницу (первый раз отображается старый некомпозитный кеш, бывает)
Не берусь утверждать, что оба предположения имеют место быть в вашем случае, но это то о чём говорит мой опыт....
Алексей Задойный пишет: Группа администраторов случайно не добавлена в настройках композита в "анонимные"? Если да, то система воспринимает её как подлежащую показу композитного сайта. А если композитная страница уже создана для неавторизованной группы... Ну, вы поняли, что происходит )))))
Здравствуйте, Алексей. Нет, администраторы не добавлены в группы котороые считаются анонимными
Цитата
Алексей Задойный пишет: Касательно "не заработал" - кнопка появилась? Самый простой способ проверить заработал ли композит для конкретной страницы - неавторизованным юзером посмотреть есть ли кнопка. Иногда нужно обновить страницу (первый раз отображается старый некомпозитный кеш, бывает)
Кнопки нет, открывал сайт в режиме инкогнито.
Вот так пытаюсь подготовить компонент, может что то делаю не так.
Виктор, вам надо перевести ВСЕ компоненты на странице в композитный режим. Пока хоть 1 не композитный - ничего не заработает. Вы можете смотреть в файле лога по адресу страницы какие компоненты и какие шаблоны ещё "не композитные" (естественно запись там создаётся после хита по страницы анонимом).
Касательно проблемы с авторизацией пока предположений увы нет. Возможно стоит пообщаться с саппортом.
У меня же вот такой вопрос возник при интеграции этого Композитного сайта в реальный проект. Есть баннеры, которые на каждом хите показываются в случайном порядке (функция shuffle на php). Указал для области с баннерами, что это динамическая область, с помощью методов
Код
Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("banners-container");
... тут вывод баннеров
Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("banners-container", "");
Вроде все по мануалу получилось, а все равно при каждом хите файл (в моем случае это index@.html) перезаписывается. О чем есть соответствущие записи в логе. Причем, как только убираю использование shuffle, то есть баннеры в определенном порядке каждый раз выводятся, то перезаписи не происходит. Ну оно и понятно, контент перестает меняться.
Есть у кого идеи, как обойти это? Может так и должно быть?
Виктор Карионов,в документации о настройке nginx пока только пример, да и то очень сложный до понимания. Чтобы с ним разобраться и настроить, нужно хорошо знать как настраивать nginx У вас все работает хорошо без nginx, никаких ошибок и кэш на каждом хите не перезаписывается?
Ваш конфиг не верный. Там используется rewrite, которая не позволит нам достичь нужного эффекта. Нужно не переадресовать, а именно указать, что кэш брать из нужного пути. Если настроено не верно, не факт что совсем "свалиться", может работать не верно, может кэш все равно не отдавать nginx, а все же запускать апач.
Я вам приведу только некоторые части:
Код
...
set $proxyserver "http://127.0.0.1:8888";
set $docroot "/home/bitrix/www";
...
# путь по умолчанию к кэш-файла
set $storedAuth "";
set $usecache "";
# Проверяем все условия для включения композита
if ( $http_bx_action_type = "" ) { set $usecache "A"; } #проверка на аякс-запрос
if ( $request_method = "GET" ) { set $usecache "${usecache}B"; } #метод передачи GET
if ( $cookie_BITRIX_SM_NCC = "" ) { set $usecache "${usecache}C"; } #не установлена кука _NCC
if ( $http_x_forwarded_scheme !~ "https" ){ set $usecache "${usecache}D"; } #не https
if (-f "$docroot/bitrix/html_pages/.enabled") { set $usecache "${usecache}E"; }
# IE9 и ниже исключить.
modern_browser_value "modern"; #Проверяем что браузер современный
modern_browser msie 10.0; #Устанавливаем какой браузер считать современным
modern_browser unlisted;
if ($modern_browser) { #Если браузер msie 10.0 и выше
set $usecache "${usecache}F";
}
# Проверяем авторизованного пользователя
if ( $cookie_BITRIX_SM_LOGIN != "" ) { set $storedAuth "A"; }
if ( $cookie_BITRIX_SM_UIDH != "" ) { set $storedAuth "${storedAuth}B"; }
if ( $cookie_BITRIX_SM_CC != "Y" ) { set $storedAuth "${storedAuth}C"; }
if ( $storedAuth !~ "ABC" ) { set $usecache "${usecache}Z"; }
...
## cache location
location ~* @.*\.html$ {
internal;
}
# Dynamic pages
location ~ /$ {
if ($usecache != "ABCDEFZ" ) {
break;
proxy_pass $proxyserver;
}
set $test_file "/bitrix/html_pages/$host$uri/index@$args.html";
try_files $test_file @apache;
}
# php file processing
location ~* ^(.*)\.php$ {
if ($usecache != "ABCDEFZ") {
break;
proxy_pass $proxyserver;
}
set $test_file "/bitrix/html_pages/$host$1@$args.html";
try_files $test_file @apache;
}
# apache location
location @apache {
proxy_pass $proxyserver;
}
...
Вам именно нужно подправить существующие директивы или дописать, если таких нету. Остальные нужно оставить!
Так, же если у вас работает на виртуальной машине, и в папке
Код
/bitrix/html_pages/
папки с портом идут в имени, то вместо $host нужно написать $host-номер порта (можно прямо номер порта, а можно с помощью переменной внутри конфига nginx)
Как проверить что завелось как нужно? Несколько раз обновите страницу, которая в текущий момент отображается в композитном режиме и остановите апач. Сайт все равно будет открываться (но второй хит будет провальным)
Если что-то не понятно, я потом могу более детальнее расписать что и какие директивы для чего тут служат.
Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("banners-container");
... тут вывод баннеров
Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("banners-container", "");
Такая конструкция только в шаблоне сайта и внутри не должно быть компонентов! С удалением этой конструкции ошибка пропадает?
А вообще сравните index@.html и сравните с index@.html.delete.<microtime> Не должен ни один символ отличаться, в противном случае контрольная сумма разная и поэтому идет перезапись. Найдите что отличается, найдите почему и исправьте.
Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("banners-container");
... тут вывод баннеров
Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("banners-container", "");
Такая конструкция только в шаблоне сайта и внутри не должно быть компонентов! С удалением этой конструкции ошибка пропадает?
А вообще сравните index@.html и сравните с index@.html.delete. Не должен ни один символ отличаться, в противном случае контрольная сумма разная и поэтому идет перезапись. Найдите что отличается, найдите почему и исправьте.
Обнаружил такое. Сравнил два дубля и разница у них только в последней строке. Ну это я прям 2 документа сравнил </html><!--461b4e654aef24e108996964a5118d5b-->
В папке /bitrix/html_pages/some.ru/catalog/ Лежат 2 файла
index@utm_source=yandexdirect&utm_medium=cpc&utm_campaign=catalog.html и его дубль index@utm_source=yandexdirect&utm_medium=cpc&utm_campaign=catalog.html.delete.1421829057.4623