Укажите символическую ссылку на внешний URL

Укажите символическую ссылку на внешний URL

Не уверен, возможно ли это вообще, но, возможно, есть другой способ, который даст тот же результат.

Старая ситуация

Я использую сервер LAMP с CentOS 6. На этом сервере размещено МНОГО веб-сайтов, которыми мы владеем. В файловой системе у нас есть папка со всеми активами, которые являются общими для этих веб-сайтов (изображения, аудиофайлы и т. д.). Речь идет о 400 тыс. файлов и 60 ГБ данных.

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

Скажем такресурсыsymlink указывает на /server/path/to/assets. Веб-сайты загружают файл, вызывая, например, http://mywebsite.com/assets/audio_file.mp3. Внутри себя символическая ссылка assets загружает файл, расположенный в /server/path/to/assets/audio_file.mp3.

Новая ситуация

Мы решили перенести эторесурсыпапку с сервера в другое место в Интернете (AWS S3, если кому-то интересно), чтобы сэкономить место на сервере и снизить нагрузку.

Проблема

Поскольку мы перемещаем местоположение этих активов, нам нужно будет вручную изменить все ссылки на эти активы в коде всех веб-сайтов. Это, конечно, МНОГО работы, мы говорим о тысячах из них.

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

Идеальное решение

В идеале я имел в виду что-то простое, например, создание символической ссылки, на которую указывают все текущие символические ссылки, и указание этой ссылки на URL-адрес нашего контейнера AWS S3. Что-то вроде:

  1. Удалите /server/path/to/assetsпапку (конечно, предварительно переместив оттуда все файлы)
  2. Создатьновыйсимволическая ссылка (или любое другое решение, которое здесь сработает) называетсяресурсывместо папки, которая указывает наhttps://my-amazon-s3.com/assets

И затем, как по волшебству, когда веб-сайт хочет загрузиться http://mywebsite.com/assets/audio_file.mp3, он ищет файл в корзине AWS S3, а не на нашем сервере.

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

решение1

Невозможно создать символическую ссылку на несмонтированную файловую систему.

S3-корзину можно смонтировать как локальную файловую систему, используя s3fs, см.https://github.com/s3fs-fuse/s3fs-fuse. После этого он отобразится как локальная файловая система, и вы сможете создавать символические ссылки обычным способом.

Обратите внимание, что за кулисами это использует API S3 для загрузки контента на ваш локальный сервер и доставки его оттуда. Относительно говоря, это медленно. Это может сделать его неподходящим для вашего веб-сайта, но это решение остается за вами.

Альтернативный метод, который вы можете рассмотреть, — это перенаправление запросов с использованием RewriteRuleфункциональности Apache. Использование регулярного выражения — это довольно тривиально,

RewriteRule ^/assets/(.*)$ https://my-amazon-s3.com/assets/$1 [R=302,L]

Если вы используете HAProxy, то вы можете добиться аналогичного результата.

Связанный контент