106  /  274

Условия работы композитного кеша

Просмотров: 30632
Дата последнего изменения: 19.08.2021
Александр Суворов
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5

Примечание: Указанные в этом уроке настройки производить не нужно. Здесь дано описание того, что происходит при включении настроек NGINX на технологию Композитный сайт в BitrixVM только для ознакомления.

Условия разделены на две группы:

Глобальные условия

Настройки определяются в файле: /etc/nginx/bx/maps/composite_settings.conf. NGINX не использует технологию Композитный сайт, если соблюдается хотя бы одно условие:

  1. есть заголовок BX_ACTION_TYPE,
  2. есть заголовок BX_AJAX,
  3. это не GET-запрос,
  4. в query_string есть параметр ncc,
  5. в query_string есть параметр bxajaxid,
  6. в query_string есть параметр sessid,
  7. запрос сделан из IE ранее 10 версии,
  8. запрос по адресу /bitrix/,
  9. запрос по адресу /index_controller.php,
  10. есть кука NCC,
  11. есть куки LOGIN, UIDH и при этом нет куки CC.

Определение условий сделано через http_ngx_map_module:

  • По каждому из условий создано свое отображение. Например, в случае если переменная $http_bx_action_type содержит данные, то композитный ключ $not_bx_action_type будет содержать 0.
    map $http_bx_action_type $not_bx_action_type {
      default "0";
      ''      "1";
    }
  • Все условия используются для финальной проверки:
    # test all global conditions
    map "${not_bx_action_type}${not_bx_ajax}${is_get}${non_arg_ncc}${non_arg_bxajaxid}${non_arg_sessid}${is_modern}${is_good_uri}${non_cookie_ncc}${is_storedAuth}" $is_global_composite {
      default     "1";
      ~0          "0";
    } 

    Если хоть одно из условий содержало 0, то итоговое значение переменной $is_global_composite будет равно 0.



Персональные условия для сайта

Персональные проверки NGINX для сайта, определяются в момент включения или обновления композита из консольного меню. Для таких настроек создается и обновляется файл в каталоге: /etc/nginx/bx/maps/. Имя файла имеет специальный формат: <ID>.cache_<SITE_NAME>.conf, где:

  • ID - уникальный идентификатор сайта для кеша (инкрементное значение от 1),
  • SITE_NAME - имя сайта в системе (example.org).

NGINX не будет использовать композитный кеш, если выполняется хотя бы одно из условий:

  1. в query_string есть параметр из конфига (ключ ~EXCLUDE_PARAMS в .config.php),
  2. запрос по протоколу HTTPS (по галочке в настройках),
  3. запрос на домен, не указанный в списке доменов (ключ DOMAINS в .config.php),
  4. запрос по адресу, не указанному в "маске включения" ( ключ ~INCLUDE_MASK в .config.php),
  5. запрос по адресу, указанному в списке "маска исключений" ( ключ ~EXCLUDE_MASK в .config.php).

Определение условий сделано через http_ngx_map_module:

  • По каждому из условий, найденных в .config.php, создается свое отображение. Например, если задано условие INCLUDE_MASK для запроса, будет создана следующая структура:
    # test include uri for site
    map $uri $is_include_uri_02 {
      default  "0";
      "~*^.*?\.php$"  "1";
      "~*^.*?/$"  "1";
    
    }

    Если переменная $uri содержит одно из следующих регулярных выражений, то $is_include_uri_02 будет содержать 1, в остальных случая переменная будет равна 0.

    Примечание: Обратите внимание, что в переменной используется идентификатор сайта, это сделано для того, чтобы разграничить условия разных сайтов.

  • Все найденные условия, используются для финальной проверки:
    # variable $is_site_composite_02 used in site config
    map "${config_domain_02}${is_include_uri_02}${not_exclude_uri_02}${not_https_schema_02}" $is_site_composite_02 {
      default   "1";
      ~0        "0";
    }
    Если хоть одна из переменных получит значение 0, переменная $is_site_composite_02 будет содержать 0, в остальных случаях 1.


Ключ поиска в композите

Ключ - это файл, который NGINX будет искать в композитном кеше (ключ для memcached хранилища, файл в случае хранения на файлах). Он нужен для того, чтобы привести запрос на сайт (uri) к универсальному виду.

Данный ключ определяется в глобальных настройках в файле /etc/nginx/bx/maps/composite_settings.conf. Так же, как для условий, используется модуль nginx ngx_map_module:

map $uri $composite_key {
  default                         $uri;
  ~^(?P.+)/$           $non_slash;
  ~^(?P.+)/index.php$  $non_index;
  ~^(?P.+)/index.html$ $non_index;
}

Действуют следующие правила:

  • Если запрос заканчивается на слеш, то вырезается финальный слеш из запроса.
  • Если запрос содержит index.php или index.html, то они вырезаются из запроса.


6
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии