Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке для 1C-Bitrix и получать быстрые и квалифицированные ответы от профессионалов!

Композитный сайт битрикс + nginx + If-Modified-Since

+1 голос

По умолчанию, если включить в админке битрикс композитный режим, заголовки last-modified и ответ на If-Modified-Since работают без дополнительных настроек. Но, есть нюанс. Если композит отдаётся через php, то поисковые боты, браузеры и этот сервис http://tools.seo-auditor.com.ru/if-modified-since/ видят правильные ответы. Они используют метод GET

 

 

При этом данный, очень популярный сервис https://last-modified.com/ru/if-modified-since.html не видит этих заголовков. Он использует метод HEAD.

 

Если клиент очень любит этот сервис, то можно добавить конверсию заголовков HEAD в GET

Если композит отдаётся через php, добавляем в /etc/nginx/bx/conf/bitrix.conf

 

location @force_get {
      recursive_error_pages on;
      proxy_method GET;
      proxy_pass $proxyserver;
}

# directories page processing
location ~ /$ {
          error_page 550 = @force_get;
          if ($request_method = HEAD) { return 550; }
...
  proxy_pass $proxyserver;
}

 

Если композит отдаётся через nginx, добавляем в /etc/nginx/bx/site_enabled/конфиг_сайта

location @force_get {
      recursive_error_pages on;
      proxy_method GET;
      proxy_pass $proxyserver;
    }

  # main location with processing composite
  location / {
      error_page 550 = @force_get;
      if ($request_method = HEAD) { return 550; }

   ...
    proxy_pass $proxyserver;
  }

 

При этом, если настроить отдачу композита через nginx,

./menu.sh - 6.  Manage sites in the pool - 9. Configure nginx for composite

 

то, данный сервис tools.seo-auditor.com.ru/if-modified-since/ заявляет 304 Not Modified не найден

Данный инструмент подтверждает отсутствие реакции на if-modified-since, при данных настройках. webmaster.yandex.ru/tools/server-response/

Отсюда вопрос, каким образом можно настроить корректную реакцию на if-modified-since при включении композитной технологии битрикса и отдачи композитного кеша через nginx?

 

спросил 25 Сен от аноним

2 Ответы

0 голосов

Если добавить в в /etc/nginx/bx/site_enabled/конфиг_сайта

if_modified_since     before;

Оба сервиса видят: Not Modified найден.

 

Насколько всё это корректно — большой вопрос.

ответил 26 Сен от аноним
0 голосов

В конфиге nginx от битрикса есть этот параметр if_modified_since:

        ## cache location
        location ~* @.*\.html$ {
                internal;
                root /home/bitrix/www;
                charset cp1251;
                override_charset off;
                source_charset cp1251;
                if_modified_since exact;
        }
Так как в случае отдачи статики через nginx, фактически отдаются html файлы (и при необходимости обновляются JS хитом в сторону Битрикса), всё должно быть вполне корректно. Интересно, а не может ли влиять сбившееся время (часовой пояс) на поведение при запросе If-Last-Modified?.. Настройки времени на сервере и в PHP как раз могут отличаться...

 

ответил 26 Сен от root (20,300 баллов)
Спасибо за информацию

В моём конфиге bitrixenv 7.1.0, такой location в bitrix_general выглядит по другому.

    # Cache location: composite and general site
    location ~* @.*\.html$ {
      internal;
      # disable browser cache, php manage file
      expires -1y;
      add_header X-Bitrix-Composite "Nginx (file)";
    }


Изначально пробовал использовать exact, но тогда webmaster.yandex  и tools.seo-auditor, начинают указывать на отсутствие  304 Not Modified
Часовой пояс на сервере настроен корректно.
Мой /etc/nginx/bx/site_enabled/ssl.s1.conf — https://pastebin.com/JUWwLfiV
Мой /etc/nginx/bx/conf/bitrix_general.conf — https://pastebin.com/mgx9JXn8

Попробовал добавить exact в указанный location - 304 Not Modified не найден
С before — работает.
https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=39&LESSON_ID=4550&LESSON_PATH=3910.3259.2663.4550

304 ответ отдаётся на третий хит: на первый создаётся композитный кеш, на второй передаётся время изменения, на третий - идет с заголовком if-Modified-Since, на который сервер отвечает 304 ответом.

Похожие вопросы

0 голосов
1 ответ
0 голосов
0 ответов
0 голосов
6 ответов
спросил 06 Окт, 13 от ErickJ (120 баллов)
Управление продуктом: аналитика, разработка, продвижение