外部 URL へのシンボリックリンクを指定する

外部 URL へのシンボリックリンクを指定する

これが本当に可能かどうかはわかりませんが、同じ結果が得られる別の方法があるかもしれません。

以前の状況

私は CentOS 6 で LAMP サーバーを実行しています。このサーバーは、私たちが所有する多数の Web サイトをホストしています。ファイル システムには、これらの Web サイトに共通するすべてのアセット (画像、オーディオ ファイルなど) を含むフォルダーがあります。約 400K のファイルと 60 GB のデータがあります。

ウェブサイトがそのフォルダにアクセスする方法は、シンボリックリンクと呼ばれる資産それぞれのドキュメントルートのルートに配置されます(つまり、基本的にこれらのファイルは数十個あります)資産シンボリックリンクはファイルシステム全体に広がっているため、これらのすべての Web サイトのコードは、ページにこれらのファイルを読み込むために、シンボリックリンクへの参照でいっぱいになります。

例えば資産シンボリックリンクは を指します/server/path/to/assets。Web サイトは、たとえば を呼び出してファイルを読み込みます。http://mywebsite.com/assets/audio_file.mp3内部的には、アセットのシンボリックリンクは にあるファイルを読み込みます/server/path/to/assets/audio_file.mp3

新たな状況

私たちはそれを移転することに決めました資産サーバーのスペースを節約し、負荷を軽減するために、フォルダーをサーバーからインターネット上の別の場所 (興味のある人のために AWS S3) に移動します。

問題

これらのアセットの場所を移動するため、すべての Web サイトのコード内でこれらのアセットへの参照をすべて手動で変更する必要があります。もちろん、これは膨大な作業であり、数千に及ぶことになります。

すべての Web サイトのコード内を検索して置換するオプションがあり、他に方法がない場合にはこれを実行しますが、別の理由から、可能であればこれを避けたいと思います。

理想的な解決策

私が理想としていたのは、現在のすべてのシンボリックリンクが指している場所にシンボリックリンクを作成し、そのシンボリックリンクを AWS S3 バケットの URL にポイントするという単純なものでした。次のようになります。

  1. フォルダを削除します/server/path/to/assets(もちろん、そこからすべてのファイルを移動した後)。
  2. 作成する新しいシンボリックリンク(またはここで機能する他の解決策)と呼ばれる資産を指すフォルダの代わりにhttps://my-amazon-s3.com/assets

そして、不思議なことに、Web サイトがロードしようとするとhttp://mywebsite.com/assets/audio_file.mp3、そのファイルは当社のサーバーではなく AWS S3 バケット内で検索されます。

これはちょっと要求しすぎかもしれないと分かっていますので、誰かがこの問題を解決できる別の方法を提案してくれることを期待しています。

答え1

マウントされていないファイルシステムへのシンボリックリンクを作成する方法はありません。

S3バケットは、を使用してローカルファイルシステムとしてマウントできますs3fss3fs-fuse は、以下の URL からダウンロードできます。これを実行すると、ローカル ファイル システムとして表示され、通常の方法でシンボリック リンクを作成できるようになります。

舞台裏では、S3 API を使用してローカル サーバーにコンテンツを取得し、そこから配信していることに注意してください。比較的遅いです。このため、Web サイトに適さない可能性がありますが、その判断はあなた次第です。

検討したい別の方法は、ApacheのRewriteRule機能を使用してリクエストをリダイレクトすることです。正規表現を使用すると、これはかなり簡単です。

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

HAProxy を使用している場合は、同様の結果を得ることができます。

関連情報