diff --git a/source/_articles/2019-08-08-yandex-disk-image-hosting.md b/source/_articles/2019-08-08-yandex-disk-image-hosting.md
index 29a7666..977405e 100644
--- a/source/_articles/2019-08-08-yandex-disk-image-hosting.md
+++ b/source/_articles/2019-08-08-yandex-disk-image-hosting.md
@@ -1,61 +1,68 @@
---
-title: Яндекс.Диск как хостинг картинок
-description: Использование возможностей Яндекс.Диска для хостинга картинок
+title: Яндекс.Диск для хостинга картинок
keywords: [яндекс.диск, хостинг картинок, yandex disk, image hosting, hosting]
-draft: true
---
-Я искал простой и надежный хостинг картинок для блога. Чтобы хранил картинки
-годами, давал прямые ссылки и не закрылся в течение хотя бы пары лет.
+У [Яндекс.Диска](ya-disk) есть замечательная функция. Он может создавать превью
+загруженных фотографий. Эта функциональность не афишируется, но описана
+в [документации](ya-api-preview).
-Раньше я использовал в качестве хостинга фотографий для блога сервис
-Яндекс.Фотки. С его помощью можно было получить картинки разных разрешений
-для адаптивной верстки. Сервис работал уже продолжительно время, у него была
-большая аудитория, им было удобно пользоваться.
+У меня есть фотография на Диске `/img/kemsky.jpg`. Чтобы получить ее превью,
+нужно выполнить запрос:
-Но в один момент Яндекс решил закрыть сервис. Вместо него появился Яндекс.Диск,
-а фотоальбомы теперь были представлены в виде коллекций. Так же просто как
-раньше уже было не получить прямых ссылок на загруженные фотки.
+```
+GET /img/kemsky.jpg?preview&size=XS
+User-Agent: my_application/0.0.1
+Host: webdav.yandex.ru
+Authorization: OAuth 0c4182a7c2cf4521964a72ff57a34a07
+```
-Яндекс.Диском я пользовался и до этого. Я знал, что он поддерживает
-протокол WebDav. Это удобный протокол, с помощью которого можно подключить Диск
-в виде жесткого диска себе в систему.
+Но есть проблема. Для запросов нужен токен. Без токена не получится использовать
+это API для публичного хостинга.
-Одним из первых вариантов было написать прокси для того, чтобы использовать
-именно WebDav и проксировать к нему запросы. У меня был бы web-server,
-который принимал бы http-запросы и направлял их Диску.
-
-С этой мыслью я и пошел читать документацию к Яндекс.Диску. И в самом конце
-наше жемчужину. Оказывается, именно для изображений Диск умеет создавать
-превью. Можно просто передать нужное разрешений и диск отдаст картинку.
-
-Это было то, что нужно. Но для публичного использования было одно препятствие.
-Для доступа к данным нужно авторизоваться. Делается это с помощью http-заголовка
-`Authorization`.
-
-Получалось, что все равно нужен прокси, чтобы скрыть авторизационные данные.
-Прокрутив решения с отдельным приложением, которое бы подставляло в
-запросы заголовок `Authorization`, я вспомнил о сервере [Caddy](caddy).
-С его помощью прокси настраивается буквально в три строки.
+Решение - сервер [Caddy](caddy) в качестве прокси. Caddy очень
+удобно использовать в качестве фронтенда для внутренних сервисов.
+Он просто настраивается, а самое главное - поддерживает автоматический
+выпуск и обновление SSL-сертификатов буквально одной строчкой конфига.
+Скроем токен в конфигурации сервера, и будем передавать его при обращении
+к Яндекс.Диску:
```
preview.vakhrushev.me {
proxy /img https://webdav.yandex.ru {
transparent
header_upstream User-Agent "yandex-disk-previewer/1.0"
- header_upstream Authorization "Basic {{ '{{' }} (yandex_disk.login ~ ':' ~ yandex_disk.password) | b64encode {{ '}}' }}"
+ header_upstream Authorization "OAuth 0c4182a7c2cf4521964a72ff57a34a07"
}
tls anwinged@ya.ru
}
```
-Данные авторизации я поместил в хранилище Ansible Vault и подставляю
-при развертывании конфигурации на свой сервер. Также настройка прокси
-ограничивает директории, к которым можно получить доступ.
-Так как на Яндекс.Диске у меня хранятся и личные данные.
+Директива `proxy /img` будет направлять все запросы с `preview.vakhrushev.me/img`
+на `https://webdav.yandex.ru/img`. Таким образом во внешний
+мир будет смотреть только директория `img`, а остальные останутся скрытыми.
-[ya-disk](https://disk.yandex.ru)
-[ya-api](https://yandex.ru/dev/disk/doc/dg/concepts/quickstart-docpage/)
-[ya-api-preview](https://yandex.ru/dev/disk/doc/dg/reference/preview-docpage/)
-[caddy](https://caddyserver.com/)
+Кроме OAuth авторизации можно использовать Basic, передавая логин и
+[пароль приложения](app-password). Мне этот способ удобнее,
+чтобы не заморачиваться с OAuth. Логин и пароль я храню
+зашифрованными с помощью [Ansible Vault](vault).
+И строчка с заголовком тогда будет выглядеть так:
+
+```
+header_upstream Authorization "Basic {{ '{{' }} (yandex_disk.login ~ ':' ~ yandex_disk.password) | b64encode {{ '}}' }}"
+```
+
+А так будет выглядеть ссылка на картинку:
+
+```
+https://preview.vakhrushev.me/img/kemsky.jpg?preview&size=XXL
+```
+
+
+
+[ya-disk]: https://disk.yandex.ru
+[ya-api]: https://yandex.ru/dev/disk/doc/dg/concepts/quickstart-docpage/
+[ya-api-preview]: https://yandex.ru/dev/disk/doc/dg/reference/preview-docpage/
+[caddy]: https://caddyserver.com/
+[app-password]: https://yandex.ru/support/passport/authorization/app-passwords.html
diff --git a/source/_includes/head.twig b/source/_includes/head.twig
index 9272fb8..2c94136 100644
--- a/source/_includes/head.twig
+++ b/source/_includes/head.twig
@@ -11,6 +11,8 @@
{# Description #}
{% if page.description is defined %}
+{% elseif page.title is defined %}
+
{% endif %}
{% if page.keywords is defined and page.keywords %}