Всем здравствуйте! Уже второй день мучаюсь с этой поставленной задачей.
Стоить задача с подменой графики по аналогии с этим мануалом
Что имеется: - Есть сервер на котором крутится сайт (CentOS, BitrixVM, nginx+httpd) - Самописный скрипт который обходит папку upload и конвертирует имеющиеся картинки в формат webp и кладёт рядом (image.jpg и image.jpg.webp лежат рядом)
В сети полно инструкций для конфига nginx что бы отдавать формат webp по старому .jpg адресу, если его поддерживает браузер. Ни одна из них не срабатывает. Перепробовал варианты и с map и без. В файл ssl.s1.conf и s1.conf в блок server {} добавляю такой конфиг:
Код
set $webp_suffix "";
if ($http_accept ~* "webp") {
set $webp_suffix ".webp";
}
location ~ \.(gif|jpg|png)$ {
add_header Vary "Accept-Encoding";
try_files $uri$webp_suffix $uri $uri/ =404;
}
Думал что проблема в правилах, они неправильные и нерабочие. Но поднял тестовый сервер (centos,nginx), залил пару картинок для теста, добавил в конфиг это же правило и всё заработало. BitrixVM как будто не видит эти правила вовсе.
Ай нид хелп. Подскажите пожалуйста в какую сторону копать...
Если будет время, распишите свое решение webp для BitrixVM.
Добрый день. Касаемо настроек nginx - завелось вот такое решение:
В самое начало файла /etc/nginx/bx/conf/bitrix_general.conf, сразу после комментариев добавить следующее:
Код
set $webp_suffix "";
if ($http_accept ~* "webp") {
set $webp_suffix ".webp";
}
location ~* \.(jpeg|jpg|png)$ {
add_header Vary "Accept-Encoding";
try_files $uri$webp_suffix $uri $uri/ =404;
#expires 30d;
}
Потом перезапустить nginx
Код
$ systemctl restart nginx
Для самой конвертации картинок, я написал по быстрому на коленке консольный скрипт на php, который запускается по крону, обходит рекурсивно заданную директорию и через shell_exec() запускает cwebp для конвертации. За рецептом в ЛС
Для самой конвертации картинок, я написал по быстрому на коленке консольный скрипт на php, который запускается по крону, обходит рекурсивно заданную директорию и через shell_exec() запускает cwebp для конвертации. За рецептом в ЛС
Второй день уже бьюсь без толку! Настройки в апач тоже вносили?
Слишком много плясок с пересборкой nginx с модулем ngx_pagespeed И еще не известно будет ли потом обновляться nginx в составе с BitrixVM, надо тестить... Если есть готовый мануал прямо под bitrixvm - рад буду ознакомиться
akazakov написал: Слишком много плясок с пересборкой nginx с модулем ngx_pagespeedИ еще не известно будет ли потом обновляться nginx в составе с BitrixVM, надо тестить...
nginx будет обновляться с обновлением машины. И его пересборка с любым модулем будет затерта, если конфиги добавите - то и не перезапуститься(
Алексей Шафранский,а у меня вопрос, почему то bx-nginx не подхватил динамический модуль, пришлось пересобирать вместе с модулем ngx_pagespeed ваш пакет. Может стоит в эту сторону подумать, чтобы научить bx-nginx подхватывать динамические модули?
akazakov написал: Слишком много плясок с пересборкой nginx с модулем ngx_pagespeedИ еще не известно будет ли потом обновляться nginx в составе с BitrixVM, надо тестить...
nginx будет обновляться с обновлением машины. И его пересборка с любым модулем будет затерта, если конфиги добавите - то и не перезапуститься(
Может обсудите там на очередной планерке включение ngx_pagespeed в состав стандартной BitrixVM? По умолчанию можно сделать отключенной, и включать через menu.sh Или хотя бы добавить в скрипт установщика возможность сборки с этим модулем через флаг типа --enable-pagespeed?
Фишка очень нужная и актуальная в современном вебе
P.S. Исправьте пожалуйста опечатку в названии темы. Только сейчас заметил
akazakov написал: Может обсудите там на очередной планерке включение ngx_pagespeed в состав стандартной BitrixVM?По умолчанию можно сделать отключенной, и включать через menu.sh
Тикет у нас есть. В нем один запрос на эту фичу, и вот ваш, второй) Поднял вопрос, спросил разработку.
Цитата
akazakov написал: Или хотя бы добавить в скрипт установщика возможность сборки с этим модулем через флаг типа --enable-pagespeed?
Слишком сложно) Если и делать, то сразу собирать nginx вместе с ним. Включать или нет - через меню каждый решит сам. Кроме включения там еще настроить надо, и тут уже сложней. И насколько знаю, не все модули с ним работают корректно: ошибки вида ломаются формы, попапы не отвечают и т.д.
Ах да, забыл рассказать про одну деталь, и возможные грабли на которые вы можете наступить...
После настройки nginx на отдачу webp, обязательно ОТКЛЮЧИТЕ Bitrix CND для картинок!!!
CND битрикса отправляет запросы на ваш сайт с неверными заголовками, и забирает webp графику. Но когда отдаёт её, не проверяет заголовки. По этому поводу я писал в ТП, но там меня отфутболили. Может кто нибудь создать запрос в https://idea.1c-bitrix.ru и скинуть ссылку сюда? А то мне лень) А все остальные уже проголосуют за идею и попробуем протолкнуть реализацию этого функционала.
- Самописный скрипт который обходит папку upload и конвертирует имеющиеся картинки в формат webp и кладёт рядом (image.jpg и image.jpg.webp лежат рядом)
Чтоб заработал CDN нужно поменять как выделил жирным. Проверил на CloudFlare - просто перестает кешировать картинки. Каждому браузеру отдает каждый раз не из кеша CDN, а с nginx сервера. Но в Cloudflare можно выставить для кеширования Respect Existing Headers. Тогда он будет учитывать заданные настройки кеширования для объектов. Как там в CDN (учитывает или перезаписывает) не в курсе. Кто может - проверьте. Пропишите, вычистите кеш на CDN. Зайдите на какую-то внутреннюю страницу сайта сначала с Chrome, потом на эту же с Safari. Хочу отметить, что картинки кешироваться на CDN не будут при это. Но этот костыль позволит оставить CDN как услугу в целом для всего остального контента.
Причем PageSpeed Insights считает что кеш прописан (тут речь о кеше в браузере). Видимо срабатывает директива ниже я там изменил location ~* \.(css|js|gif|png|jpg|jpeg|ico|ogg|ttf|woff|eot|otf)$ на location ~* \.(css|js|webp|gif|png|jpg|jpeg|ico|ogg|ttf|woff|eot|otf)$
CDN выключен, всё перепробовал, не получается подмена.
Вижу Response headers: "vary: Accept-Encoding", но картинка грузиться с расширением .png, а не .webp
Подскажите пожалуйста что делать?
Так в том то и смысл, что расширение остаётся тоже, но сам контент подменяется. Смотрите в DevTools во вкладке Network колонку Type. Должно показывать webp, если конечно у файлов есть рядом лежащие .webp копии
CDN выключен, всё перепробовал, не получается подмена.
Вижу Response headers: "vary: Accept-Encoding", но картинка грузиться с расширением .png, а не .webp
Подскажите пожалуйста что делать?
Так в том то и смысл, что расширение остаётся тоже, но сам контент подменяется. Смотрите в DevTools во вкладке Network колонку Type. Должно показывать webp, если конечно у файлов есть рядом лежащие .webp копии
Здравствуйте! Такая же ситуация. Type везде jpeg... Если не сложно, прикрепите полное содержание файла /etc/nginx/bx/conf/bitrix_general.conf. Заранее спасибо!
Обновление
Получилось) Делюсь опытом. Вот что у меня сработало:
Скрипт .sh. Пригодится тем, у кого уже куча картинок в папке upload. Настройки сжатия можно выставить самостоятельно. Можно конечно и cron использовать.
if ($request_uri ~* "^(.*/)index\.php$") { return 301 https://$host$1; } if ($request_uri ~* "^(.*/)index\.html$") { return 301 https://$host$1; }
set $imcontenttype "text/html; charset=utf-8"; add_header X-Frame-Options SAMEORIGIN; # composite variables set $composite_cache "bitrix/html_pages/${host}${composite_key}/index@${args}.html"; set $composite_file "${docroot}/${composite_cache}"; # config file set $composite_enabled "${docroot}/bitrix/html_pages/.enabled"; # if test pass through general tests: set $use_composite_cache ""; # global site test, the same for all sites on the server if ($is_global_composite = 1) {set $use_composite_cache "A";} # personal site tests, generated by site config if ($is_site_composite_05 = 1) {set $use_composite_cache "${use_composite_cache}B";}
# Include parameters common to all websites include bx/conf/bitrix_general.conf;
# main location with processing composite location / { if (-f $composite_enabled) { se t $use_composite_cache "${use_composite_cache}C"; } # test cache file exists if (-f $composite_file) { se t $use_composite_cache "${use_composite_cache}D"; }
Илья Бурый, Здравствуйте. Спасибо за советы. Но, изображения с сайта так же используются в мобильном приложении. Не все мобильные устройства поддерживают webp. Думаю решить проблему отдачей мобильному приложению только оригинальных jpg. Подскажите правило ngnix для редиректа файла с расширением jpg_m на файл jpg в обход подключения файла webp?
Все кто пытаются решить проблему "Используйте современные форматы изображений" в Битриксе, могу посоветовать разместить сайт на шаред хостинге, уже автоматически настроена проверка на наличия картинок в формате WebP.