{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Максим Кузнецов: заметки с тегом веб-сервер",
    "_rss_description": "Простыми словами о веб-разработке",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/maxkuznetsov.ru\/tags\/veb-server\/",
    "feed_url": "https:\/\/maxkuznetsov.ru\/tags\/veb-server\/json\/",
    "icon": "https:\/\/maxkuznetsov.ru\/user\/userpic@2x.jpg?1586398004",
    "author": {
        "name": "Максим Кузнецов",
        "url": "https:\/\/maxkuznetsov.ru\/",
        "avatar": "https:\/\/maxkuznetsov.ru\/user\/userpic@2x.jpg?1586398004"
    },
    "items": [
        {
            "id": "40",
            "url": "https:\/\/maxkuznetsov.ru\/all\/nginx-free-wildcard-ssl\/",
            "title": "Бесплатный wildcard SSL-сертификат для поддоменов",
            "content_html": "<p>Для простых веб-приложений достаточно одного домена (example.com). Однако для сложных систем, с разделением на бэкенд и фронтенд части, с лендингами, микросервисами и т. п. нужны поддомены, например: api.example.com, app.example.com, cdn.example.com.<\/p>\n<p>Вместо того, чтобы выпускать отдельные сертификаты на каждый поддомен, мы можем выпустить один сертификат, покрывающий сразу все кейсы — *.example.com. Такой тип сертификатов называется <i>Wildcard<\/i>.<\/p>\n<p>Как и в предыдущей статье про выдачу <a href=\"https:\/\/maxkuznetsov.ru\/all\/nginx-free-ssl\/\">бесплатного SSL-сертификата<\/a>, мы воспользуемся утилитой Certbot, который поможет нам выпустить и установить бесплатные SSL-сертификаты для наших поддоменов через центр Let’s encrypt.<\/p>\n<blockquote>\n<p>Предполагаю, что вы уже настроили ваш сервер, чтобы поддомены были доступны по http (80 порт). Если вы не знаете, как это сделать, поищите статью по вашим ОС и веб-серверу на Digitalocean. Например, вот статья про <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-nginx-on-ubuntu-20-04-ru\">установку и настройку Nginx на Ubuntu 20.04<\/a>.<\/p>\n<\/blockquote>\n<p>Заходим на сайт <a href=\"https:\/\/certbot.eff.org\/\">Certbot’а<\/a> и выбираем ОС нашего сервиса и веб-сервер. Ниже в примере будет Ubuntu 20.04 и Nginx. Дальше выбираем таб Wildcard.<\/p>\n<p>Предположим, что нам нужны следующие домены: example.com, api.example.com и app.example.com.<br \/>\nЗапускаем по инструкции первые 8 шагов для установки самой утилиты:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Удаляем snap, если он был установлен ранее\r\n$ sudo apt-get remove certbot\r\n\/\/ Устанавливаем snap\r\n$ sudo snap install core; sudo snap refresh core\r\n\/\/ Устанавливаем certbot\r\n$ sudo snap install --classic certbot\r\n$ sudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot\r\n$ sudo snap set certbot trust-plugin-with-root=ok\r\n\r\n\/\/ Проверяем, что certbot установлен\r\n$ certbot --version\r\n&gt; certbot 1.14.0<\/code><\/pre><p>Для того, чтобы выпустить сертификаты, мы должны доказать удостоверяющему центру Let’s Encrypt, что мы действительно владеем данными доменами и сабдоменами. Есть два способа это сделать.<\/p>\n<ol start=\"1\">\n<li>Добавить в DNS специальные txt записи, которые попросит нас добавить Let’s Encrypt, после этого он их проверит, и если записи будут обнаружены, это подтвердит факт владения (или по крайней мере доступа к ним). С чужими доменами так сделать не получится.<\/li>\n<li>Webroot. Аналогичный способ, но специальные уникальные строки добавляются в файлы, которые потом должны быть доступны через URL, например: <tt><a href=\"http:\/\/api.example.com\/.well-known\/acme-challenge\/JH1kjoemxaS33d\">http:\/\/api.example.com\/.well-known\/acme-challenge\/JH1kjoemxaS33d<\/a><\/tt>. Поскольку такой файл сможет добавить только владелец домена, этого тоже достаточно, чтобы Let’s Encrypt удостоверился в факте нашего владения.<\/li>\n<\/ol>\n<p>Certbot позволяет автоматизировать каждый из способов. Нам не придётся делать это вручную, что критично для будущей поддержки сертификатов — их нужно будет обновлять раз в два месяца. И если доменов и сабдоменов много, то это быстро станет обузой.<\/p>\n<p>Certbot поддерживает из коробки несколько популярных DNS-регистраторов (те сервисы, где можно купить домен), и тогда можно следовать по инструкции, однако в моём случае регистратором был Godaddy, который не поддерживается. Поэтому я воспользовался вторым способом и он оказался даже проще первого. Кроме того, данный способ надёжнее, так как не зависит, повезёт ли вам с поддержкой вашего регистратора или нет.<\/p>\n<p>Для верификации доменов по webroot нам нужно настроить каждый домен\/поддомен, чтобы он отдавал директорию <tt><domain>\/.well-known\/acme-challenge\/<\/tt>. В эту папку certbot запишет то, что нужно Let’s Encrypt, чтобы мы прошли проверку, поэтому убедитесь, что certbot имеет туда доступ.<\/p>\n<p>Есть небольшой лайфхак, как упростить работу с этой папкой в конфигах сервера. Для этого мы создадим отдельный файл конфига, который будем подключать для каждого домена\/поддомена. Пример для Nginx:<\/p>\n<pre class=\"e2-text-code\"><code class=\"nginx\">\/\/ создаём файл &quot;\/etc\/nginx\/letsencrypt.conf&quot;\r\nlocation \/.well-known\/acme-challenge {\r\n    # Вместо `\/var\/www\/acme-challenge` можно указать любую папку.\r\n    # Она может быть недоступна извне, это неважно. Главное, чтобы туда имел доступ ваш текущий юзер.\r\n    alias \/var\/www\/acme-challenge\/.well-known\/acme-challenge;\r\n}<\/code><\/pre><p>Подключаем этот файл в конфигах доменов и поддоменов. Допустим, у вас есть файл <\/tt>\/etc\/nginx\/sites-available\/api.example.com<\/tt> (с остальными аналогично).<\/p>\n<pre class=\"e2-text-code\"><code class=\"nginx\">server {\r\n    server_name api.example.com;\r\n    include letsencrypt.conf;\r\n    ...\r\n}<\/code><\/pre><p>Готово. Теперь домен будет все запросы, начинающиеся на <tt>\/.well-known\/acme-challenge<\/tt> будут направлены в папку <tt>\/var\/www\/acme-challenge\/.well-known\/acme-challenge<\/tt>, общую для всех доменов\/поддоменов.<\/p>\n<p>Далее запускаем certbot, чтобы он пообщался с Let’s Encrypt, подтвердил наши домены, выпустил сертификаты и даже настроил наш веб-сервер на их использование.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">certbot run -a webroot -i nginx -w \/var\/www\/acme-challenge -d example.com -d api.example.com -d app.example.com<\/code><\/pre><p>Разберём эти конфиги:<\/p>\n<ul>\n<li><tt>-a webroot<\/tt> — это способ аутентификации (подтверждение, что мы владеем доменами)<\/li>\n<li><tt>-i nginx<\/tt> — один из доступных способов установки сертификатов. В данном случае это nginx, так как именно этот веб-сервер мы используем. Certbot вам задаст несколько вопросов и после этого обновит конфиги. Делает он это очень умно, так что без разницы как эти конфиги у вас написаны. И даже устанавливает редирект http на https.<\/li>\n<li><tt>-w \/var\/www\/acme-challenge<\/tt> — путь до папки, которая будет использоваться для webroot аутентификации. Обратите внимание, что именно эта папка прописана в <tt>\/etc\/nginx\/letsencrypt.conf<\/tt>.<\/li>\n<li><tt>-d example.com -d api.example.com -d app.example.com<\/tt> — указываем все необходимые поддомены, обязательно первым указываем основной домен (не поддомен), иначе ничего не получится.<\/li>\n<\/ul>\n<p>Всё, certbot всё сделал сам, даже перезагрузил веб-сервер. Можно зайти через браузер на поддомены и убедиться, что всё работает.<\/p>\n<p><hr><\/p>\n<p>p.s. если браузер выдаёт ошибку, что такой домен не найден, то проверьте, что файрволл настроен на выдачу https трафика. Например, в Ubuntu 20.04 это делается через UFW:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">\/\/ Проверяем, есть ли HTTPS в активных правилах\r\n$ sudo ufw status\r\n\/\/ Смотрим, какие правила могут быть включены\r\n$ sudo ufw app list\r\n\/\/ Включаем Nginx https\r\n$ sudo ufw allow 'Nginx HTTPS'\r\n\/\/ Проверяем, что правило появилось в активных\r\n$ sudo ufw status<\/code><\/pre>",
            "date_published": "2021-05-02T18:05:26+03:00",
            "date_modified": "2021-05-02T18:06:02+03:00",
            "_date_published_rfc2822": "Sun, 02 May 2021 18:05:26 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "40",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "38",
            "url": "https:\/\/maxkuznetsov.ru\/all\/deployment-users\/",
            "title": "Deployment: настраиваем пользователей",
            "content_html": "<h3>Проблема<\/h3>\n<p>Под <tt>root<\/tt>-пользователем работать небезопасно, равно как и делать весь проект доступным <tt>www-data<\/tt>.<br \/>\nКроме того, во многих веб-приложениях пользователи имеют возможность загружать свои файлы. И очень часто с такими файлами возникают конфликты, так как пишутся они под <tt>www-data:www-data<\/tt>, а деплоим под другим пользователем. Даже если деплоить под <tt>root<\/tt>, то скорее всего права на папку перепишутся и <tt>www-data<\/tt> потеряет доступ к нужным файлам.<\/p>\n<h3>Решение<\/h3>\n<p>Создать нового пользователя deploy с правами на коннект к серверу по ssh, доступом только к папке с проектом и возможностью изменять файлы в <tt>.\/public\/uploads<\/tt> и <tt>.\/var<\/tt>.<\/p>\n<p>Создаём на сервере пользователя <tt>deploy<\/tt> из-под <tt>root<\/tt>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ssh root@вашсервер\r\nuseradd --create-home -s \/bin\/bash deploy<\/code><\/pre><p>Настроим доступ по ssh через ключи<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">mkdir \/home\/deploy\/.ssh\r\ntouch \/home\/deploy\/.ssh\/authorized_keys<\/code><\/pre><p>Вставьте содержимое одного из публичного ключа своего локального пользователя в файл <tt>authorized_keys<\/tt> и сохраните. Вывести публичный ключ локально можно командой: <tt>cat ~\/.ssh\/id_rsa.pub<\/tt> (название ключа <tt>id_rsa.pub<\/tt> у вас может отличаться).<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vim \/home\/deploy\/.ssh\/authorized_keys<\/code><\/pre><p>Меняем права на более строгие<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chown -R deploy:deploy \/home\/deploy\r\nchmod 600 \/home\/deploy\/.ssh\/authorized_keys<\/code><\/pre><p>Определим пользователя нашего веб-сервера (в примере ниже это <tt>www-data<\/tt>)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\\  -f1\r\n&gt; www-data<\/code><\/pre><p>Добавляем пользователя <tt>deploy<\/tt> в группу <tt>www-data<\/tt> (группа веб-сервера)<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">usermod -a -G www-data deploy<\/code><\/pre><p>Выставляем права на папку проекта<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">chown -R deploy:deploy \/var\/www\/project\r\nchmod -R 0775 \/var\/www\/project<\/code><\/pre><p>Проверим, есть ли setfacl в системе <tt>setfacl -h<\/tt> и установим, если его нет. Команда для Ubuntu:<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">sudo apt-get install acl<\/code><\/pre><p>Выдадим права на папки с кэшем, логами и загруженными пользовательскими файлами<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">sudo setfacl -dR -m u:www-data:rwX -m u:deploy:rwX \/var\/www\/project\/var \/var\/www\/project\/public\/uploads\r\nsudo setfacl -R -m u:www-data:rwX -m u:deploy:rwX \/var\/www\/project\/var \/var\/www\/project\/public\/uploads<\/code><\/pre><p>Готово.<\/p>\n<p>Для самого деплоймента я обычно использую <a href=\"deployer.org\">Deployer<\/a> c параметром <tt>writable_mode=acl<\/tt>.<\/p>\n",
            "date_published": "2020-11-27T04:17:56+03:00",
            "date_modified": "2020-11-27T04:17:45+03:00",
            "_date_published_rfc2822": "Fri, 27 Nov 2020 04:17:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "38",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "23",
            "url": "https:\/\/maxkuznetsov.ru\/all\/nginx-free-ssl\/",
            "title": "Как получить бесплатный SSL-сертификат и установить его на Nginx",
            "content_html": "<p>Иметь сайт без HTTPS — это небезопасно. Особенно критично для интернет-магазинов и сервисов, где пользователь оставляет свои данные.<\/p>\n<p>HTTPS — это защищённый брат HTTP (см. статью <a href=\"https:\/\/maxkuznetsov.ru\/all\/http-basics\/\">Что такое HTTP<\/a>), который шифрует все пересылаемые от браузера к серверу и обратно данные. Для такого шифрования необходим SSL-сертификат, который позволяет убедиться пользователю, что он видит страницы именно того сайта, на  который он зашёл. Сертификаты бывают разного вида и стоимости в зависимости от уровня проверки владельца сайта, но при этом суть остаётся та же — шифрование пользовательских данных.<\/p>\n<p>SSL-сертификат нужно получить в центрах сертификации (ЦС). Часто регистраторы доменов и провайдеры хостинга партнёрятся с такими центрами и облегачают задачу выпуска и установки сертификата на ваш сайт.<\/p>\n<p>За выпуск сертификата ЦС берут плату, ведь им нужно по крайней мере удостовериться, что вы действительно владеете доменом, на который запрашиваете сертификат. У них такой бизнес. Можно выпустить и свой самоподписанный сертификат бесплатно, но браузеры не смогут ему доверять (ведь они не смогут уточнить его оригинальность у независимого ЦС) и  будут показывать предупреждение.<\/p>\n<h3>Как получить SSL-сертификат бесплатно<\/h3>\n<p>К счастью, есть ЦС, который выпускает SSL-сертификаты бесплатно, — это <a href=\"https:\/\/letsencrypt.org\/ru\/about\/\">LetsEncrypt<\/a>. Они это делают во имя благой цели — безопасного интернета во всём мире. Такой сертификат подойдёт для большинства небольших сайтов и сервисов, но среднему и крупном бизнесу — нет. Им нужны сертификаты <a href=\"https:\/\/www.globalsign.com\/ru-ru\/ssl-information-center\/types-of-ssl-certificate\/\">с частичной или полной проверкой компании<\/a>.<\/p>\n<p>LetsEncrypt позволяет вам выпустить сертификат <a href=\"https:\/\/letsencrypt.org\/ru\/docs\/client-options\/\">множеством способов<\/a> для разных операционных систем, веб-серверов, языков программирования. Cам центр сертификации крайне рекомендует использовать <a href=\"https:\/\/certbot.eff.org\/\">Certbot<\/a>.<\/p>\n<h3>Пример установки сертификатов с помощью Certbot на Ubuntu<\/h3>\n<p>Предположим, у нас есть сайты yoursite.ru и yourblog.ru, работающие по HTTP через Nginx. Добавим для них сертификаты и перейдём на HTTPS.<\/p>\n<p>Заходим на сайт <a href=\"https:\/\/certbot.eff.org\/\">Certbot’a<\/a> и выбираем Nginx и Ubuntu.<\/p>\n<p>Добавляем ppa для установки certbot на нашем сервере, обновляем зависимости и устанавливаем саму утилиту.<\/p>\n<pre class=\"e2-text-code\"><code class=\"terminal\">$ sudo apt-get update\r\n$ sudo apt-get install software-properties-common\r\n$ sudo add-apt-repository universe\r\n$ sudo add-apt-repository ppa:certbot\/certbot\r\n\r\n# крайне важно выполнить эту команду, иначе следующая команда выдаст ошибку о незнакомом пакете.\r\n$ sudo apt-get update\r\n\r\n# Устанавливаем сам certbot\r\n$ sudo apt-get install certbot python-certbot-nginx<\/code><\/pre><p>Запускаем certbot и проходим через визард, отвечая на простые вопросы.<\/p>\n<pre class=\"e2-text-code\"><code class=\"terminal\">$ certbot --nginx\r\nSaving debug log to \/var\/log\/letsencrypt\/letsencrypt.log\r\nPlugins selected: Authenticator nginx, Installer nginx\r\nStarting new HTTPS connection (1): acme-v02.api.letsencrypt.org\r\n\r\nWhich names would you like to activate HTTPS for?\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n1: yourblog.ru\r\n2: yoursite.ru\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nSelect the appropriate numbers separated by commas and\/or spaces, or leave input\r\nblank to select all options shown (Enter 'c' to cancel):<\/code><\/pre><p>Указываем через запятую или пробел номера сайтов из списка, для которых хотим выпустить сертификат, — в нашем случае «1,2» — жмём enter.<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">Obtaining a new certificate\r\nDeploying Certificate to VirtualHost \/etc\/nginx\/sites-enabled\/yourblog.ru\r\nDeploying Certificate to VirtualHost \/etc\/nginx\/sites-enabled\/yoursite.ru\r\n\r\nPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\n1: No redirect - Make no further changes to the webserver configuration.\r\n2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for\r\nnew sites, or if you're confident your site works on HTTPS. You can undo this\r\nchange by editing your web server's configuration.\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nSelect the appropriate number [1-2] then [enter] (press 'c' to cancel):<\/code><\/pre><p>Certbot настолько заботлив, что предлагает настроить принудительный редирект HTTP->HTTPS за нас. Соглашаемся, введя «2».<\/p>\n<pre class=\"e2-text-code\"><code class=\"bash\">Redirecting all traffic on port 80 to ssl in \/etc\/nginx\/sites-enabled\/yourblog.ru\r\nRedirecting all traffic on port 80 to ssl in \/etc\/nginx\/sites-enabled\/yoursite.ru\r\n\r\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r\nCongratulations! You have successfully enabled https:\/\/yourblog.ru and\r\nhttps:\/\/yoursite.ru<\/code><\/pre><h3>Обновление letsencrypt-сертификата<\/h3>\n<p>Нужно иметь в виду, что такой SSL-сертификат действителен только на 30 дней и через месяц его нужно обновить, снова подтвердив свои данные.<\/p>\n<p>Но сюрприз! Certbot уже добавил регулярную задачу в systemd или cron и обновит сертификат сам, нам ничего больше делать не нужно.<\/p>\n<p>—-<br \/>\nДля других систем и веб-серверов установка будет слегка отличаться, поэтому обратитесь к <a href=\"https:\/\/certbot.eff.org\/lets-encrypt\/ubuntuxenial-nginx\">официальному сайту certbot’a<\/a>.<\/p>\n",
            "date_published": "2020-04-10T08:39:24+03:00",
            "date_modified": "2020-04-14T18:05:32+03:00",
            "_date_published_rfc2822": "Fri, 10 Apr 2020 08:39:24 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "23",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}