23.12.2020 0 min to read

Вставка кода счётчика Яндекс.Метрика средствами NGINX через модуль sub_filter

Category : Статьи

Рабочая среда: Oracle Linux 7.9, Oracle DB 19c EE, реверс прокси Nginx 1.18.0 из rpm репозитория nginx.org, ORDS 20.3 с Tomcat 9 и APEX 20.1.

Необходимо добавить код счётчика Яндекс Метрики или любой другой код без вмешательства в код приложений.

Решение

Решается использованием модуля NGINX sub_filter: https://nginx.org/ru/docs/http/ngx_http_sub_module.html “фильтр, изменяющий в ответе одну заданную строку на другую”.

Мы заменим закрывающий тег head </head> на код нашего счетчика с закрывающим тегом head. Значения для замены в одинарных кавычках.

Настройку делаем в отдельном файле, в файл конфигурации виртуалхоста подключаем его:

include /etc/nginx/ym_apex.conf;

и сам файл:

proxy_set_header Accept-Encoding ""; # Отключаем сжатие трафика между nginx и бэкендом, со сжатием фильтр работать не будет
sub_filter_types *;
sub_filter_once off;
sub_filter_last_modified on;
sub_filter '</head>' '

<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(69129271, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/000000000" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->

</head>';

Перезапуск и nginx будет добавляет код счетчика в заголовки страниц.

Tags: ,