將符號連結指向外部 URL

將符號連結指向外部 URL

不確定這是否可能,但也許還有另一種方法可以得到相同的結果。

舊情況

我正在使用 CentOS 6 運行 LAMP 伺服器。在檔案系統中,我們有一個資料夾,其中包含這些網站共有的所有資產(圖像、音訊檔案等)。我們談論的是大約 400K 文件和 60 GB 數據。

網站存取該資料夾的方式是透過符號連結被稱為資產放在各自文檔根目錄下(所以基本上有幾十個這樣的資產符號連結遍布整個檔案系統),因此所有這些網站的程式碼都充滿了對這些符號連結的引用,以便將這些檔案載入到其頁面中。

這麼說吧資產符號連結指向/server/path/to/assets.網站載入一個檔案調用,例如http://mywebsite.com/assets/audio_file.mp3.在內部,資產符號連結會載入位於 的檔案/server/path/to/assets/audio_file.mp3

新情勢

我們決定將其移至資產將資料夾從伺服器上刪除到網路中的另一個位置(AWS S3,如果有人好奇的話),以節省伺服器中的一些空間並減少負載。

問題

由於我們要移動這些資產的位置,因此我們需要手動更改所有網站程式碼中對這些資產的所有引用。當然,這是一項繁重的工作,我們談論的是數千項工作。

可以選擇在所有網站的程式碼中使用搜尋和替換,如果沒有其他方法,我會這樣做,但出於不同的原因,我寧願盡可能避免這樣做。

理想的解決方案

理想情況下,我的想法是簡單地創建一個當前所有符號鏈接都指向的符號鏈接,並使其指向我們的 AWS S3 存儲桶的 URL。就像是:

  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。執行此操作後,它會顯示為本機檔案系統,並且您可以以正常方式進行符號連結。

請注意,這是在幕後使用 S3 API 將內容獲取到本地伺服器並從那裡傳送內容。相對來說,是慢的。這可能會使其不適合您的網站,但這取決於您。

您可能想要考慮的另一種方法是使用 Apache 的功能重定向請求RewriteRule。使用正規表示式這是相當簡單的,

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

如果您使用 HAProxy,那麼您可以獲得類似的結果。

相關內容