Краткое руководство по этой настоятельно рекомендуемой программе

WordPress — одна из самых популярных CMS. Его легко установить и использовать, а тысячи плагинов и шаблонов делают разработку веб-сайтов очень простой и быстрой. Но его преимущества также являются недостатками, потому что создание страниц может быть ресурсоемким, а WordPress — не только одна из самых популярных, но и одна из самых уязвимых систем.

Во многих случаях достаточно простой статической веб-страницы, но WordPress — более удобное решение. Хорошим примером является блог или веб-сайт продукта. Вы должны выбрать шаблон, установить цвета и некоторые другие вещи, загрузить контент, и вуаля, у вас есть полнофункциональный веб-сайт с некоторыми часами работы. Это те случаи, когда CloudFront может стать отличным решением, позволяющим сделать ваш сайт быстрым, масштабируемым и безопасным.

Amazon CloudFront — это Сеть доставки контента. Всемирная распределенная система кэширования. Когда пользователь пытается получить доступ к вашему контенту через CloudFront, система направляет запрос на ближайший пограничный сервер, который обслуживает контент, если он существует на нем, или запрашивает его с вашего сервера WordPress.

В этом случае WordPress — это что-то вроде генератора статических страниц, который генерирует страницы, которые обслуживает CloudFront. Потребление ресурсов вашего сайта будет чрезвычайно низким, поскольку CloudFront запрашивает контент только один раз и при необходимости предоставляет его миллион раз. Вы можете справиться с чрезвычайно высоким трафиком с миллионами пользователей, используя только микроэкземпляр для своего WordPress!

Еще одним преимуществом этой системы является то, что общедоступной является только часть CloudFront. Ваш WordPress скрыт от внешнего мира, поэтому никто не может его атаковать или взломать. Благодаря CloudFront ваш источник находится в максимальной безопасности.

Чтобы добавить CloudFront на свой сайт WordPress, настройте дистрибутив CloudFront на консоли AWS.

Установите исходный домен на URL-адрес вашего текущего сайта WordPress и дайте имя вашему дистрибутиву.

В блоке «Настройки» выберите альтернативный домен. Это будет новый домен, в котором ваш сайт WordPress будет доступен через CloudFront.

Если развертывание завершено, скопируйте доменное имя CloudFront и создайте для него запись CNAME. Например, если ваш альтернативный домен — www.example.com, а домен CloudFront — d3qu6ceheilwux.cloudfront.net, добавьте

www.example.com CNAME d3qu6ceheilwux.cloudfront.net

запись в файл зоны DNS.

Если все сделано правильно, вы увидите свой сайт на www.example.com. Нажав на ссылки на новом сайте, вы вернетесь на исходный сайт WordPress. Чтобы этого не произошло, добавьте эти две строки кода в начало файла wp-config.php:

if($_SERVER['HTTP_USER_AGENT'] == 'Amazon CloudFront') {
    define( 'WP_HOME', '... new site URL …' );
    define( 'WP_SITEURL', '... new site URL …' );
} else {
    define( 'WP_HOME', '... original site URL …' );
    define( 'WP_SITEURL', '... original site URL …' );
}

Пользовательским агентом CloudFront является «Amazon CloudFront», поэтому, когда CloudFront читает содержимое сайта, он получает новые URL-адреса, но когда мы обращаемся к нему для администрирования, он будет использовать исходные URL-адреса. После этого изменения ссылки будут указывать на URL-адреса CloudFront (например, www.example.com).

Поздравляем! Вы настроили CloudFront для своего сайта WordPress. Мы почти закончили, но я пообещал улучшить безопасность, и наш исходный сайт все еще общедоступен. Самый простой способ предотвратить атаки на исходный сайт — добавить HTTP-аутентификацию с надежным паролем.

Если вы используете Nginx, вы можете создать файл паролей с помощью утилиты htpasswd:

htpasswd -c /etc/nginx/htpasswd wordpress

которые вы можете добавить в свой конфиг:

auth_basic           "Password protected content";
auth_basic_user_file /etc/nginx/htpasswd;

CloudFront может отправлять заголовки HTTP при доступе к источнику, чтобы вы могли добавить заголовок аутентификации в его конфигурацию. Заголовок авторизации выглядит так:

Authorization: Basic {base64encode({user}:{password})}

Итак, если ваше имя пользователя abc и ваш пароль 123, тогда заголовок авторизации будет:

Authorization: Basic YWJjOjEyMw==

Заголовок можно сгенерировать с помощью любого онлайн кодировщика base64. Если вы сгенерировали заголовок, добавьте его в конфигурацию вашего источника.

После развертывания CloudFront получит общедоступный доступ к вашему сайту через CloudFront, но исходный сайт будет защищен паролем. Чтобы защитить свой сайт, вы можете ежемесячно менять пароль и настроить fail2ban для предотвращения атак методом перебора.

Последнее, о чем я хотел поговорить, это инвалидация. Поведение CloudFront по умолчанию заключается в том, что он обновляет контент только один раз в день, поэтому, если вы что-то меняете и не хотите ждать день, вам необходимо удалить кеш. CloudFront использует для этого аннулирование.

Если вы хотите удалить один или несколько файлов из кеша, вам необходимо создать инвалидацию. Инвалидация — это широковещательное сообщение на пограничные серверы об удалении данного контента. Параметр недействительности представляет собой список путей к файлам, которые могут содержать *. Если вы хотите полностью удалить кеш, используйте ‘/*’.

Как видите, CloudFront — идеальное решение для масштабирования вашего сайта WordPress и обеспечения его безопасности. С его помощью ваш сайт может обслуживать миллионы пользователей, и вам нужен только микроэкземпляр позади CloudFront. Решение не специфично для WordPress. Вы можете использовать его для любого сайта, который не использует взаимодействия на стороне сервера.

В некоторых случаях требуется немного другое мышление. Например, вам нужно использовать размещенные службы комментариев, такие как комментарии Disqus или Facebook, или, если у вас есть интернет-магазин на вашем сайте, вы должны организовать его в другом домене как отдельную службу. Но я думаю, что это очень низкая цена за безопасность и бесперебойную, быструю и масштабируемую подачу контента.