![IAP가 GCP 로드 밸런서로 구성된 경우 HTTP에서 HTTPS로 어떻게 리디렉션할 수 있나요?](https://rvso.com/image/760611/IAP%EA%B0%80%20GCP%20%EB%A1%9C%EB%93%9C%20%EB%B0%B8%EB%9F%B0%EC%84%9C%EB%A1%9C%20%EA%B5%AC%EC%84%B1%EB%90%9C%20%EA%B2%BD%EC%9A%B0%20HTTP%EC%97%90%EC%84%9C%20HTTPS%EB%A1%9C%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
현재 로드 밸런서 뒤에 있는 IAP(Identity-Aware-Proxy)로 인증된 Google Compute Engine에서 호스팅되는 웹사이트가 있습니다. 이 모든 것은 https를 통해 훌륭하게 작동하지만 현재는 404로 응답하므로 http가 https로 리디렉션되는지 확인하고 싶었습니다.
그래서 나는 따라갔다.https://cloud.google.com/load-balancing/docs/https/setting-up-http-https-redirect이는 http 트래픽을 https로 리디렉션하기 위해 두 번째 로드 밸런서를 설정하라는 메시지를 표시합니다.
그러나 문제는 이 지침을 따른 후 다음을 탐색할 때입니다.http://my-website.com다음 오류가 발생합니다.
오류 403(금지됨)!!1
- 그건 오류입니다.
귀하의 클라이언트는 이 서버에서 URL을 가져올 수 있는 권한이 없습니다. 그게 우리가 아는 전부 야.
http 로드 밸런서는 301 - 영구 전체 경로 리디렉션으로 설정되어 있지만 브라우저 개발자 도구 네트워크 탭에는 리디렉션이 발생하지 않습니다. 403으로 바로 응답합니다. URL도 http:// 체계를 유지합니다.
요약하면 내 설정은 다음과 같습니다.
외부 HTTPS 로드 밸런서
- 프런트엔드 - HTTPS, 고정 IP, HTTPS 전용
- 백엔드 - IAP(Identity-Aware-Proxy)(Identity Platform을 통한 이메일 인증) -> Compute Engine 인스턴스 그룹
외부 HTTP 로드 밸런서
- 프런트엔드 - HTTP, 고정 IP(위의 HTTPS 로드 밸런서와 동일)
- 백엔드 - 없음
- 호스트 및 경로 규칙:
- 방법:고급 호스트 및 경로 규칙(URL 리디렉션, URL 재작성)
- 행동:클라이언트를 다른 호스트/경로로 리디렉션
- 호스트 리디렉션: https://my-website.com
- 경로 값:*
- 리디렉션 응답 코드:301 - 영구 이전
- HTTPS 리디렉션:활성화됨
403을 얻지 않고 이 문제를 해결하는 방법에 대한 아이디어를 주시면 감사하겠습니다!
답변1
설명해주신 방법url-map에 문제가 있는 것 같습니다http
사이트 버전에 액세스할 수 있기 때문입니다 .
확실하게 확인하려면 다시 확인하세요(또는새로 만들기) url-map gcloud
명령:
gcloud compute url-maps describe web-map-http
creationTimestamp: '2020-12-02T03:18:27.053-08:00'
defaultUrlRedirect:
httpsRedirect: true
redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
fingerprint: KU2hPu1ao=
id: '50586028237895404'
kind: compute#urlMap
name: web-map-http
selfLink: https://www.googleapis.com/compute/v1/projects/xxxxx/global/urlMaps/web-map-http
URL 맵이 준비되면 대상 프록시를 만듭니다.
gcloud compute target-http-proxies create http-lb-proxy \
--url-map=web-map-http \
--global
결과:
gcloud compute target-http-proxies describe http-lb-proxy
creationTimestamp: '2020-12-02T03:19:39.090-08:00'
fingerprint: lgJkIY8E=
id: '3781119498457764'
kind: compute#targetHttpProxy
name: http-lb-proxy
selfLink: https://www.googleapis.com/compute/v1/projects/xxxx/global/targetHttpProxies/http-lb-proxy
urlMap: https://www.googleapis.com/compute/v1/projects/xxxx/global/urlMaps/web-map-http
전달 규칙은 다음과 같습니다.
gcloud compute forwarding-rules create http-content-rule \
--address=lb-ipv4-1 \ # Same IP address used for HTTPS load balancer
--global \
--target-http-proxy=http-lb-proxy \
--ports=80
다음과 같아야 합니다.
gcloud compute forwarding-rules describe http-content-rule --global
IPAddress: 34.107.123.141
IPProtocol: TCP
creationTimestamp: '2020-12-02T03:22:38.132-08:00'
description: ''
fingerprint: L1vA0Ik9Y=
id: '888330202637841'
kind: compute#forwardingRule
loadBalancingScheme: EXTERNAL
name: http-content-rule
networkTier: PREMIUM
portRange: 80-80
selfLink: https://www.googleapis.com/compute/v1/projects/xxxx/global/forwardingRules/http-content-rule
target: https://www.googleapis.com/compute/v1/projects/xxxx/global/targetHttpProxies/http-lb-proxy
HTTP와 HTTPS LB 모두에 동일한 공용 IP를 사용해야 합니다. 들어오는 트래픽이 차단되지 않으면 방화벽 규칙을 확인하세요.
curl
모든 작업을 올바르게 수행하면 예제에 표시된 것과 동일한 출력을 얻을 수 있습니다 .