Apuntar enlace simbólico a URL externa

Apuntar enlace simbólico a URL externa

No estoy seguro de si esto es posible, pero tal vez haya otra forma de hacerlo que obtenga el mismo resultado.

La vieja situación

Estoy ejecutando un servidor LAMP con CentOS 6. Este servidor aloja MUCHOS sitios web de nuestra propiedad. En el sistema de archivos tenemos una carpeta con todos los activos que son comunes a estos sitios web (imágenes, archivos de audio, etc). Estamos hablando de alrededor de 400.000 archivos y 60 GB de datos.

La forma en que los sitios web acceden a esa carpeta es a través de unenlace simbólicollamadoactivoscolocados en la raíz de su respectiva raíz de documento (por lo que básicamente hay docenas de estosactivosenlaces simbólicos distribuidos por todo el sistema de archivos), por lo que el código de todos esos sitios web está lleno de referencias a esos enlaces simbólicos para cargar esos archivos en sus páginas.

digamos queactivosEl enlace simbólico apunta a /server/path/to/assets. Los sitios web cargan un archivo llamado, por ejemplo, http://mywebsite.com/assets/audio_file.mp3. Internamente, el enlace simbólico de activos carga el archivo ubicado en /server/path/to/assets/audio_file.mp3.

La nueva situación

Hemos decidido mover eso.activoscarpeta fuera del servidor, a otra ubicación en Internet (AWS S3 si alguien tiene curiosidad), para ahorrar algo de espacio en el servidor y reducir la carga.

La cuestión

Dado que estamos moviendo la ubicación de esos activos, necesitaríamos cambiar manualmente todas las referencias a esos activos en el código de todos los sitios web. Eso es MUCHO trabajo, por supuesto, estamos hablando de miles de ellos.

Existe la opción de usar buscar y reemplazar en el código de todos los sitios web, lo cual haré si no hay otra manera, pero por diferentes razones preferiría evitarlo si es posible.

La solución ideal

Lo que tenía en mente, idealmente, sería algo tan simple como crear un enlace simbólico al que apunten todos los enlaces simbólicos actuales y que apunte a la URL de nuestro depósito de AWS S3. Algo como:

  1. Eliminar la /server/path/to/assetscarpeta (después de haber movido todos los archivos de allí, por supuesto)
  2. Crear unnuevoenlace simbólico (o cualquier otra solución que funcione aquí) llamadoactivosen lugar de la carpeta que apunta ahttps://my-amazon-s3.com/assets

Y luego, mágicamente, cuando un sitio web quiere cargar http://mywebsite.com/assets/audio_file.mp3, busca el archivo en el depósito de AWS S3 y no en nuestro servidor.

Sé que esto podría ser demasiado pedir, así que esperaba que tal vez hubiera otra manera de resolver este problema que alguien pudiera sugerir.

Respuesta1

No hay forma de crear un enlace simbólico a un sistema de archivos no montado.

Un depósito S3 se puede montar como un sistema de archivos local usando s3fs, consultehttps://github.com/s3fs-fuse/s3fs-fuse. Una vez que haga esto, aparecerá como un sistema de archivos local y podrá realizar un enlace simbólico de la forma normal.

Tenga en cuenta que, entre bastidores, se utiliza la API de S3 para buscar contenido en su servidor local y entregarlo desde allí. Relativamente hablando, es lento. Esto puede hacer que no sea adecuado para su sitio web, pero esa determinación depende de usted.

Un método alternativo que quizás desee considerar es redirigir las solicitudes utilizando RewriteRulela funcionalidad de Apache. Usar una expresión regular esto es bastante trivial,

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

Si está utilizando HAProxy, podría lograr un resultado similar con eso.

información relacionada