Рабочая среда: 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 будет добавляет код счетчика в заголовки страниц.