Archivarix loader. Как устроены сайты, созданные Archivarix.

Новости и апдейты
Ответить
Аватара пользователя
Admin
Сообщения: 11
Зарегистрирован: 27 янв 2021, 22:19

Описание и принцип работы

Для работы восстановленных и скачанных сайтов через Archivarix используется файл index.php, который мы называем лоадером (англ. loader). Он выполняет связь между тем, что запрашивает браузер посетителя и данными, которые удалось восстановить/скачать. Для работы лоадера нужны PHP 5.6+ с включенным расширением pdo_sqlite.

Решение использовать лоадер вместо сохранения сайта со стандартной структурой выбрано не случайно. Вот основные причины:

Только такое решение позволяет всем URL работать на своих прежних местах. Особенно это важно для динамических URL. К примеру, если страница находилась по пути /item.php?id=1, то такой файл невозможно сохранить и при этом оставить его работоспособность на прежнем месте. Если файл просто сохранить как item.php, то это откроет потенциальную дыру в безопасности, т.к. любое вхождение <?php ... ?>, находившееся в html коде будет исполняться сервером. Кроме того, все запросы с другими переменными будут открывать ту же самую страницу. Если файл сохранить как item.php?id=1, то далеко не каждая файловая система позволит это сделать, т.к. файл содержит спец. символ (?) и такой файл не будет открываться как страница вашим сервером, т.к. он не будет понимать тип файла. Если же файл переименовывать в какой-нибудь item.php.id=1.html, то открываться он будет, но для работы сайта будет необходимо поменять перелинковку и URL этой страницы становится другим, а значит будет потеря внешней ссылочной массы.
Лоадер имеет гибкую настройку по поведению для кеширования, отсутствующих картинок, скриптов, стилей итд. Смотрите список параметров ниже.
Возможна интеграция с Wordpress и другими системами, когда оба сайта будут работать на одном домене одновременно и при этом независимо друг от друга.
Подключение своих счётчиков, аналитики, рекламных площадок, прощадок по продаже ссылок, своих собственных скриптов и т.д. без редактирования html-кода страниц.
Возможность редактировать сайты через Archivarix CMS
Безопасность. Сайты, созданные Archivarix невозможно взломать, т.к. взламывать кроме лоадера с открытым и простым кодом нечего. Даже если вы восстановили сайт, который ранее был на Wordpress, то ему не страшна ни одна уязвимость, которая бы была критичной на оригинальном сайте.
Нет привязки к домену. Сайт можно полноценно запустить на любом другом домене, если вы выбрали опцию "Сделать внутренние ссылки относительными"
Лоадер поддерживает восстановленный/скачанный контент для поддоменов и достаточно загрузить одно восстановление, а поддомены указать как псевдоним (alias) вашего домена.

Раз уж, были перечислены преимущества, то обязательно нужно уточнить про недостатки или ограничения:

Сайт нельзя открыть и просматривать локально из папки на компьютере. Он работает только на хостинге с PHP и его модулем pdo_sqlite.

Системные требования

Для работы восстановлений или скачиваний необходимы:

веб-сервер Apache2 или Nginx
PHP версии 5.6 или выше
расширение pdo_sqlite для PHP (входит в стандартный набор расширений PHP)

Nginx без Apache2
При использовании веб-сервера Nginx без Apache2, необходимо настроить направление всех запросов на /index.php

try_files $uri $uri/ /index.php;
Примечание: К сожалению, конфигурации nginx от разных хостинг панелей могут выглядеть совершенно по-разному. По этой причине нет единого универсального кода, который достаточно было бы прописать везде. Главной целью сделать так, чтобы все запросы на несуществующие файлы и папки направлялись на /index.php. Попросите сделать это вашего администратора или используйте веб-сервер Apache2, где все правила будут автоматически подгружаться из файла .htaccess

Расширение pdo_sqlite

Если на вашем хостинге не включено расширение pdo_sqlite, то можно попросить вашего хостера его включить или сделать это самостоятельно.

Внимание! Для нормальной работы необходима версия Sqlite 3.7 или выше. Более старые версии тоже будут работать, т.к. для них будет использоваться файл structure.legacy.db, но произойдет значительное падение скорости работы сайта.

Инструкцию по включение pdo_sqlite для популярных хостинговых панелей вы можете прочитать здесь.

PHP как модуль Apache

При использовании PHP в режиме модуля Apache могут возникнуть проблемы с правами на запись. Дело в том, что pdo_sqlite при работе с файловой базой данных structure.db создает рядом с ним в папке .content.xxxxxxxx создает временный файл. Чтобы проблемы с правами за запись не было, добавьте права 0777 на папку .content.xxxxxxxx, либо используйте PHP в режиме FastCGI для Apache2. Мы рекомендуем использовать FastCGI, т.к. это решение быстрее и безопаснее.

Параметры и возможности

В коде файла index.php можно менять настройки, которые прописываются в значения переменных. Ниже приводим их список в порядке их расположения в коде:

ARCHIVARIX_LOADER_MODE (ранее ARCHIVARIX_CMS_MODE) – позволяет интегрировать восстановленный сайт со сторонними CMS, например, Wordpress. Может принимать четыре значения.

0 – (по-умолчанию). Режим интеграции отключён. Лоадер отдает контент по тем урлам, где он есть и завершает свою работу. Там где контента нет происходит либо подстановка заглушек (см. последующие параметры, либо происходит 301-перенаправление на страницу, прописанную в параметре ARCHIVARIX_REDIRECT_MISSING_HTML
1 – режим, при котором лоадер отдаёт контент только по тем урлам, где он был восстановлен. Там где контента нет, скрипт не завершается через exit. Если лоадер подгружается из другого скрипта, к примеру, в начале index.php от Wordpress, то далее продолжится выполнение кода Wordpress.
2 – то же, что и значение 1, но для главной страницы сайта / не будет отдаваться восстановленный контент. Выбирайте этот режим, когда вам нужно, чтобы на главной странице сайта был не восстановленный сайт, а, к примеру, Wordpress.
-1 – лоадер отдаёт контент только по тем урлам, где он был восстановлен. Все остальные урлы отдают ошибку 200 Not Found. Учтите, то 404 страница при этом будет пустая, т.к. код отдаётся выполнением PHP скрипта, а не вашего веб-сервера.
ARCHIVARIX_PROTOCOL – может иметь три значения:

any – (по-умолчанию) сайт работает на любом протоколе.
http – сайт будет работать только на HTTP протоколе. Все HTTPS запросы будут принудительно перенаправлять 301-м на HTTP.
https – сайт будет работать только на HTTPS протоколе. Все HTTP запросы будут принудительно перенаправлять 301-м на HTTPS.
Если восстаовление было сделано с параметром "Сделать сайт HTTPS", то при значении any при генерации SITEMAP все URL будут https.

ARCHIVARIX_FIX_MISSING_IMAGES – все урлы картинок, которые не могли быть восстановлены/скачаны и, файлы которых имеют расширения jpg, jpeg, gif, png, bmp отдают прозрачную однопиксельную png (mimetype: image/png) заглушку. Сайты из Веб-Архива редко сохранены в нём полностью. Отсутствие части картинок это не редкость. Подстановка заглушек не портит дизайн сайта и не выдаёт лишние 404 ошибки, которые не нравятся поисковым системам. Используется файл 1px.png из директории .content.xxxxxxxx.

ARCHIVARIX_FIX_MISSING_CSS – все урлы css стилей, с расширением .css будут выдавать пустую текстовую (mimetype: text/css) заглушку, вместо 404 ошибки. Используется файл empty.css из директории .content.xxxxxxxx.

ARCHIVARIX_FIX_MISSING_JS – все урлы javascript стилей, с расширением .js будут выдавать пустую текстовую (mimetype: application/javascript) заглушку, вместо 404 ошибки. Используется файл empty.js из директории .content.xxxxxxxx.

ARCHIVARIX_FIX_MISSING_ICO – все урлы файлов иконок, с расширением .ico будут выдавать пустую (mimetype: image/x-icon) заглушку, вместо 404 ошибки. Используется файл empty.ico из директории .content.xxxxxxxx.

ARCHIVARIX_REDIRECT_MISSING_HTML – для урлов, где не удалось определить их тип по расширению файла, будет происходить 301 перенаправление на значение параметра. По-умолчанию, перенаправление происходит на главную страницу /, чтобы в случае бэклинков на не восстановленные урлы передать ссылочный вес хотя бы на главную. В случае трафика на несуществующий урл, он тоже не будет потерян, т.к. вместо 404 страницы пользователь увидит главную страницу сайта. Вебмастеры, которые хотят отключить такое перенаправление, могут его отключить значением -1 в параметре ARCHIVARIX_CMS_CODE.

ARCHIVARIX_INCLUDE_CUSTOM – создание гибких правил для вставки/замены кода на все страницы сайта (mimetype: text/html). Подстановка происходит на лету. Более подробно работу подстановки можно изучить на примере подгрузки своего кода аналитики.

ARCHIVARIX_CONTENT_PATH – позволяет поменять директорию, откуда лоадер будет подгружать файлы сайта. По-умолчанию, лоадер ищет первую директорию вида .content.xxxxxxxxx и использует её. Поиск идёт в алфавитном порядке. xxxxxxxxx для каждого восстановления разное и случайное в целях безопасности. Вы всегда можете поменять случайные символы на свою комбинацию, это никак не скажется на работе сайта. Точка в начале директории сделана для того, чтобы директорию не было видно через браузер на сервере пока вебмастер загружает файлы сайта, в случае не отключенного показа содержимого директории Options Indexes.

ARCHIVARIX_CACHE_CONTROL_MAX_AGE – для статических файлов (mimetype: application/x-javascript, application/font-woff, application/javascript, image/gif, image/jpeg, image/png, image/svg+xml, image/tiff, image/webp, image/x-icon, image/x-ms-bmp, text/css, text/javascript), лоадер будет отдавать заголовок Cache-Control c длителностью max-age равным значению этого параметра (по-умолчанию 30 дней). Это ускоряет работу сайта у пользователей, т.к. файлы кешируются в браузере. Чтобы отключить кеширование, установите значение параметра на 0. Кеширование браузером следует учесть и при работе с восстановленным сайтом. Не забывайте отключать кеширование в вашем браузере на время редактирования сайта, чтобы правильно видеть внесенные изменения.

ARCHIVARIX_CUSTOM_DOMAIN – этот параметр стоит заполнять только в двух случаях: когда у восстановленного сайта есть поддомены с контентом или когда вы запускаете восстановленный сайт на поддомене вами восстановленного домена. Во всех остальных случаях, сайты должны работать на любом другом домене, даже на локальном веб-сервере localhost. Если вы восстановили домен example.com и хотите его протестировать на test.example.com, то необходимо в параметр ARCHIVARIX_CUSTOM_DOMAIN поставить значение test.example.com, т.к. лоадер автоматически распознаёт поддомен test и пытается найти контент именно для него.

ARCHIVARIX_SITEMAP_PATH – для автоматического построения xml-карты сайта необходимо прописать её путь. Пример: /sitemap.xml. Карта генерируется динамически на основе имеющихся данных. Если количество страниц более 50.000, то карта автоматически превратится в индекс карт разбитых на части 50.000 страниц, где для каждой карты будет добавлен параметр ?id=X к указанному пути. Карты генерируются по протоколу Sitemaps, который принимают поисковый системы.

ARCHIVARIX_CATCH_MISSING – эта функция экспериментальная и её работа в дальнейшем может быть изменена. По-умолчанию она выключена. Если ее включить, то в файловую базу в отдельную таблицу будут сохранятся урлы, к которым происходили обращения, но по которым нет контента. Список таких урлов можно посмотреть через Archivarix CMS. Проанализировав список можно увидеть места, которые не были восстановлены и возможно исправить.

Решение проблем, возможные ошибки

В случае невозможной работы лоадера на хостинге, он по возможности отдает ошибку 503 Service Unavailable, чтобы не нанести ущерб при индексации сайта поисковыми системами. Описание ошибки можно посмотреть в логах ошибок вашего веб-сервера, либо в заголовке X-Error-Description ответа сервера. Ниже приведет список примеров встречающихся ошибок в логах и их причины.

PHP Fatal error: Arrays are not allowed as constants in … – ваша версия PHP ниже 5.6. Для работы лоадера необходима версия 5.6 или выше. Более старые версии не поддерживают массивы в константах, поэтому вы и видите эту ошибку. Смените версию PHP на более новую. Помните, что даже версия 5.6 уже официально вышла из под поддержки разработчиков PHP, поэтому настоятельно рекомендуем использовать на сервере актуальные версии ПО. При этом ошибка веб-сервера будет 500, т.к. наш лоадер даже не может запуститься на таком веб-сервере и правильно сообщить об ошибке.
PHP Warning: Use of undefined constant ARCHIVARIX_ORIGINAL_DOMAIN - assumed 'ARCHIVARIX_ORIGINAL_DOMA$ … или PHP Fatal error: Uncaught Error: Call to a member function execute() on boolean in … – означает проблему с правами за запись в директорию .content.xxxxxxxxx. Дело в том, что для работы файловой базы Sqlite, модуль pdo_sqlite для ускорения своей работы создает временный файл рядом с файлом базы (structure.db). Не спешите выставлять права 0777 на всю директорию. Лучше исправить саму причину, возникшей проблемы. Причин может быть несколько, они приведены ниже.
Вы распаковали файлы на сервере под пользователя root и у веб-сервера нет прав на запись к распакованным файлам. Этого делать нельзя и касается не только работы файлов, созданных Archivarix. Чтобы исправить, выполняйте распаковку под правильным пользователем веб-сервера, либо командой chown смените пользователя и группу на правильные. Кстати, не забывайте, что команду chown -R … необходимо также выполнить указав директорию .content.xxxxxxxx, т.к. по-умолчанию она не сработает на папки с точкой в начале.
Ваш PHP работает в режиме модуля Apache. Вы наверное помните времена, когда для работы загрузок на сайт было необходимо руками выставить определённым папкам права на запись. Такое режим уже устарел и на смену ему есть решения более правильные, где никаких прав руками выставлять не нужно. Рекомендуем вместо режима модуля использовать PHP в режиме CGI/FastCGI. Если вы не можете поменять режим работы PHP для вашего сервера, тогда придется добавить права на запись папке .content.xxxxxxxx
Файловая база данных structure.db испорчена, либо отсутствует. Убедитесь, что файл на месте, и что вы не выполняли в нем никаких замен текста. Это бинарный файл, в нем нельзя делать замены через текстовый редактор.
Если на вашем сервере не установлено расширение pdo_sqlite для PHP, то в заголовке веб-сервера и в логи ошибок будет выведен текст PDO_SQLITE driver is not loaded.
Ответить