Google 클라우드 스토리지 리버스 프록시. 개인 Google 클라우드 스토리지 개체를 사용하여 개인 정적 사이트를 호스팅합니다.
GCS 버킷을 사용하여 정적 사이트에 서비스를 제공하고 싶지만 액세스를 제한하려고합니다.
이 리버스 프록시 마이크로 서비스는 다양한 GCS 버킷을위한 간단한 HTTP 서버로 작동합니다. 그런 다음 적절한 방법을 사용하여 액세스를 제한 할 수 있습니다. 예를 들어 Nginx, Caddy 또는 VPN 뒤에 넣습니다.
브라우저를 통해 개인 GCS 객체에 액세스하려면 URL에 인코딩 된 특수 토큰이 필요합니다. 이로 인해 이러한 토큰을 생성하거나 요청하거나 링크하는 자산의 URI를 예측할 수 없기 때문에 대부분 (전부는 아니지만) 정적 사이트가 대부분 중단됩니다. 그러나 스토리지 개체를 공개한다는 것은 이에 대한 액세스를 제한 할 방법이 없다는 것을 의미합니다.
이 리버스 프록시는 예상 (상대)의 URI에서 HTTP보다 개인 객체를 제공하며 이러한 객체에 대한 액세스를 전혀 제한하지 않습니다. 그러나이 서버를 Nginx와 같은 다른 역 프록시 뒤에 배치하거나 VPN에 넣으면 귀하의 요구에 가장 적합한 방식으로 액세스를 제어 할 수 있습니다.
NB (GCLOUD SDK가 설치된 경우 쉘에
gcloud info
실행하여 로그인하고 올바른 프로젝트 ID 세트가 있는지 확인하십시오).
TARGET_BUCKETS
env var는 쉼표로 분리 된 버킷 목록을 기대합니다.
TARGET_BUCKETS='bucket-one,bucket-two'
하나 이상의 Target_buckets가 정의되지 않으면 서버는 던져집니다.
HISTORY
env var를 True로 설정하면 더 나은 스파 지원을 위해 히스토리 모드에서 서버가 시작됩니다. 파일 확장자가없는 모든 경로에 대해 Buckets Root index.html
파일로 응답합니다.
npm install
TARGET_BUCKETS="bucket-name" npm start
서버가 가동되고 실행되면 버킷에서 개인 객체에 액세스하려면 다음에 GET 요청을해야합니다.
<proxy-host>:<proxy-port>/<bucket-name>/<file-path>
파일 경로가 버킷에 존재하고 서버에 읽을 수있는 사전이 있으면 리버스 프록시는 해당 내용을 응답으로 보냅니다. 어떤 이유로 든 버킷에서 파일을 검색 할 수없는 경우 서버는 404를 반환합니다.
요청 된 버킷이 Target_buckets 목록에 있지 않으면 실제 버킷에 관계없이 403을 반환합니다.
GET 요청 방법 만 현재 지원됩니다.
단일 버킷 모드가 있으면 버킷 이름 경로로 모든 요청을 접두사 할 필요가 없으므로 <proxy-host>:<proxy-port>/<file-path>
단일 대상 버킷에서 파일 경로를 요청합니다.
이 프로젝트는 마이크로를 사용하므로 개발 중에 우수한 마이크로 데브 도구를 사용하게됩니다.
TARGET_BUCKETS="bucket-name" npm run dev
ADC는 엔진, Kubernetes 엔진, 앱 엔진 및 클라우드 기능을 계산하는 기본 서비스 계정을 사용하여 해당 서비스에서 실행되는 응용 프로그램을 제공합니다.
서버 용 인증 설정에서 서버 프로덕션 응용 프로그램까지
위의 내용으로 인해 인증이 처리되는 Compute Engine, Kubernetes 엔진 또는 앱 엔진을 사용하는 것이 좋습니다.
노드를 설치할 필요없이 시작하기 위해 Dockerfile을 제공했습니다. Google Cloud SDK로 인증을 설정하지 않으므로 로컬로 작동하지 않습니다.
그러나 컴퓨팅 엔진에 배포하면 인스턴스 인증이 처리됩니다. VM 인스턴스에서 Docker 이미지를 배포하는 방법을 보려면이 안내서를 확인하십시오. TARGET_BUCKETS
환경 변수를 설정하는 것을 잊지 마십시오.이 안내서를 따르면 수행 할 수 있습니다.