Apontar link simbólico para URL externo

Apontar link simbólico para URL externo

Não tenho certeza se isso é possível, mas talvez haja outra maneira de fazer isso que obterá o mesmo resultado.

A velha situação

Estou executando um servidor LAMP com CentOS 6. Este servidor hospeda MUITOS sites que possuímos. No sistema de arquivos, temos uma pasta com todos os ativos comuns a esses sites (imagens, arquivos de áudio, etc). Estamos falando de cerca de 400 mil arquivos e 60 GB de dados.

A forma como os sites acessam essa pasta é através de umlink simbólicochamadoativoscolocados na raiz da respectiva raiz do documento (então basicamente existem dezenas delesativoslinks simbólicos espalhados por todo o sistema de arquivos), então o código de todos esses sites está cheio de referências a esses links simbólicos para carregar esses arquivos em suas páginas.

Digamos queativoslink simbólico aponta para /server/path/to/assets. Os sites carregam um arquivo chamando, por exemplo, http://mywebsite.com/assets/audio_file.mp3. Internamente, o link simbólico de assets carrega o arquivo localizado em /server/path/to/assets/audio_file.mp3.

A nova situação

Decidimos mudar issoativospasta fora do servidor, para outro local na internet (AWS S3 se alguém tiver curiosidade), para economizar espaço no servidor e reduzir a carga.

O problema

Como estamos mudando a localização desses ativos, precisaríamos alterar manualmente todas as referências a esses ativos no código de todos os sites. É claro que é MUITO trabalho, estamos falando de milhares deles.

Existe a opção de usar pesquisar e substituir no código de todos os sites, o que farei se não houver outra forma, mas por diversos motivos prefiro evitar isso se possível.

A solução ideal

O que eu tinha em mente, idealmente, seria algo tão simples como criar um link simbólico para onde todos os links simbólicos atuais apontam e apontar para a URL do nosso bucket AWS S3. Algo como:

  1. Remova a /server/path/to/assetspasta (depois de mover todos os arquivos de lá, é claro)
  2. Criar umanovolink simbólico (ou qualquer outra solução que funcione aqui) chamadoativosem vez da pasta que aponta parahttps://my-amazon-s3.com/assets

E então, magicamente, quando um site deseja carregar http://mywebsite.com/assets/audio_file.mp3, ele procura o arquivo no bucket AWS S3 e não em nosso servidor.

Eu sei que isso pode ser pedir demais, então eu esperava que talvez houvesse outra maneira de resolver esse problema que alguém pudesse sugerir.

Responder1

Não há como criar um link simbólico para um sistema de arquivos não montado.

Um bucket S3 pode ser montado como um sistema de arquivos local usando s3fs, consultehttps://github.com/s3fs-fuse/s3fs-fuse. Depois de fazer isso, ele aparecerá como um sistema de arquivos local e você poderá criar um link simbólico da maneira normal.

Observe que nos bastidores isso ocorre usando a API S3 para buscar conteúdo em seu servidor local e entregá-lo a partir daí. Relativamente falando, é lento. Isso pode torná-lo inadequado para o seu site, mas a decisão depende de você.

Um método alternativo que você pode considerar é redirecionar as solicitações usando a RewriteRulefuncionalidade do Apache. Usando uma expressão regular isso é bastante trivial,

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

Se você estiver usando o HAProxy, poderá obter um resultado semelhante.

informação relacionada