Назад | Перейти на главную страницу

Перемещайте статические файлы из EC2 в S3 (или в облачную среду) без обновления ссылок

Прямо сейчас у меня есть сайт полностью на экземпляре EC2, включая все статические файлы, такие как css, js и изображения. Мне интересно, как лучше всего справиться с их перемещением. Например, в моем <HEAD> на данной html-странице у меня есть ссылка на файл .js:

<script src="js/somefile.js"></script>

Чего я хочу избежать, так это зайти и обновить это (и множество других) примерно так:

<script src="https://SOMETHING.cloudfront.net/js/somefile.js"></script>

Я не беспокоюсь о переносе файлов на S3 (пока), но больше о том, как переписать эти ссылки. Я думаю, что должен быть какой-то способ обойти это.

Для полноты картины в настоящее время я использую балансировщик нагрузки перед экземпляром EC3 (где у меня тоже есть SSL). Я также использую Route 53 для DNS.

Любые идеи помогут.

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

При этом есть много рецептов для подключения, например nginx как обратный прокси, например https://coderwall.com/p/rlguog/nginx-as-proxy-for-amazon-s3-public-private-files. Затем вы можете поместить nginx на каждый из ваших экземпляров EC2 с балансировкой нагрузки и на сервер из S3 или из локальных служб в зависимости от того, является ли контент статическим или нет.

Различные модули перезаписи, скажем, для Apache, nginx и даже IIS могут делать это «на лету», как и большинство CMS. Но это увеличивает накладные расходы на каждый запрос.

Чтобы выполнить замену автоматически и безопасно, вам действительно понадобится анализатор HTML для любого языка сценариев. Regex в этом случае было бы трудно сделать совершенно безопасно, если вы всегда не используете одинаковые интервалы и порядок аргументов в тегах и ссылках CSS. И вы также уверены, что у вас нет встроенного HTML <code> или <pre> или <script> теги. Еще более сложными будут URL-адреса, которые являются частью строк в JS-коде.

Если файлы на самом деле не HTML, а PHP или что-то еще, вам понадобится полный парсер для который язык, чтобы быть в безопасности. Или используйте поиск по регулярному выражению и замените его ручным подтверждением.

Последним вариантом будет CDN с полным прокси и настраиваемым источником. На ум приходит Cloudflare. Cloudfront тоже может это сделать, но использование пользовательского SSL очень дорого с Cloudfront.