외부 URL에 대한 심볼릭 링크 지정

외부 URL에 대한 심볼릭 링크 지정

이것이 가능한지 확실하지 않지만 동일한 결과를 얻을 수 있는 다른 방법이 있을 수 있습니다.

오래된 상황

저는 CentOS 6을 사용하여 LAMP 서버를 실행하고 있습니다. 이 서버는 우리가 소유한 많은 웹사이트를 호스팅합니다. 파일 시스템에는 이러한 웹사이트에 공통된 모든 자산(이미지, 오디오 파일 등)이 포함된 폴더가 있습니다. 우리는 약 400,000개의 파일과 60GB의 데이터를 이야기하고 있습니다.

웹사이트가 해당 폴더에 액세스하는 방식은심볼릭 링크~라고 불리는자산해당 문서 루트의 루트에 배치됩니다(따라서 기본적으로 이러한 문서는 수십 개가 있습니다).자산심볼릭 링크는 파일 시스템 전체에 퍼져 있으므로 모든 웹사이트의 코드는 페이지에 해당 파일을 로드하기 위한 심볼릭 링크에 대한 참조로 가득 차 있습니다.

라고하자자산심볼릭링크는 을 가리킨다 /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를 사용하는 경우 이와 비슷한 결과를 얻을 수 있습니다.

관련 정보