有没有办法在 GCP 中设置 "https to http" 中间件?
Is there a way to set up a "https to http" middle in GCP?
我希望这不是一个重复的问题。
我在 GCP 中基于 Grizzly 设置了一个简单的 Java 服务器。它是一个 HTTP 服务器,为 8080 上的请求提供服务。我无法设置 HTTPS 服务器(我试过了......)和服务器(响应 publicly 邮递员、curl 等)无法接收来自我的 public 网站的任何请求,因为该网站是在 HTTPS 上。
所以在发送请求的时候,明显出现了这个错误:
index.html was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint. This request has been blocked; the content must be served over HTTPS.
一个(非常...)天真的尝试使用具有 https 和 443 的 link 将请求发送到我的端点导致:
failed to receive handshake, SSL/TLS connection failed
所以我的问题是 - 如果我无法定义 HTTPS 服务器(由于我自己的限制),有没有办法配置一个中间 vm,它将在 443 上接收客户端请求,将它发送到我的实际服务器在 8080 上,然后将响应转发回去?
GCP 中的 Cloud Load Balancing 服务恰恰专门用作中介。
要专门为您在 Cloud Shell 中的用例配置负载均衡器,您可以按照以下步骤操作:
- 配置默认区域。
gcloud config set compute/zone <your-vm-zone>
- 创建非托管实例组。
gcloud compute instance-groups unmanaged create ig-us-c1
- 将您的 VM 添加到之前创建的实例组。
gcloud compute instance-groups unmanaged add-instances ig-us-c1 --instances=<your-instance-name>
- 为负载均衡器创建一个外部 ip。
gcloud compute addresses create <ip-name> \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global
- 创建健康检查。
gcloud compute health-checks create http http-basic-check \
--port 80
- 创建后端服务。
gcloud compute backend-services create web-backend-service \
--load-balancing-scheme=EXTERNAL \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
- 将实例组作为后端添加到后端服务。
gcloud compute backend-services add-backend web-backend-service \
--instance-group=ig-us-c1 \
--instance-group-zone=<your-vm-zone> \
--global
- 创建一个 URL 映射以将传入请求路由到默认后端服务。
gcloud compute url-maps create web-map-https \
--default-service web-backend-service
- 创建目标 HTTPS 代理以将请求路由到您的 URL 地图。
gcloud compute target-https-proxies create https-lb-proxy \
--url-map=web-map-https \
--ssl-certificates=www-ssl-cert
注意:[SSL 证书] 可以是 Self managed or Google managed; for testing purposes you can take a look at this document 描述 self-managed SSL 证书的用法。
- 创建全局转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create https-content-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=<ip-name> \
--global \
--target-https-proxy=https-lb-proxy \
--ports=443
- 创建一个 DNS 区域并记录指向 Load Balancer 外部 ip 地址。
gcloud beta dns managed-zones create example-zone --description="" --dns-name="example.com." --visibility="private" --networks="default"
gcloud beta dns record-sets transaction start --zone="example-zone"
gcloud beta dns record-sets transaction add <lb-public-ip-address> --name="*.example.com." --ttl="300" --type="A" --zone="example-zone"
gcloud beta dns record-sets transaction execute --zone="example-zone"
您可以使用命令进行测试:curl https://<hostname.example.com>
我希望这不是一个重复的问题。 我在 GCP 中基于 Grizzly 设置了一个简单的 Java 服务器。它是一个 HTTP 服务器,为 8080 上的请求提供服务。我无法设置 HTTPS 服务器(我试过了......)和服务器(响应 publicly 邮递员、curl 等)无法接收来自我的 public 网站的任何请求,因为该网站是在 HTTPS 上。 所以在发送请求的时候,明显出现了这个错误:
index.html was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint. This request has been blocked; the content must be served over HTTPS.
一个(非常...)天真的尝试使用具有 https 和 443 的 link 将请求发送到我的端点导致:
failed to receive handshake, SSL/TLS connection failed
所以我的问题是 - 如果我无法定义 HTTPS 服务器(由于我自己的限制),有没有办法配置一个中间 vm,它将在 443 上接收客户端请求,将它发送到我的实际服务器在 8080 上,然后将响应转发回去?
GCP 中的 Cloud Load Balancing 服务恰恰专门用作中介。
要专门为您在 Cloud Shell 中的用例配置负载均衡器,您可以按照以下步骤操作:
- 配置默认区域。
gcloud config set compute/zone <your-vm-zone>
- 创建非托管实例组。
gcloud compute instance-groups unmanaged create ig-us-c1
- 将您的 VM 添加到之前创建的实例组。
gcloud compute instance-groups unmanaged add-instances ig-us-c1 --instances=<your-instance-name>
- 为负载均衡器创建一个外部 ip。
gcloud compute addresses create <ip-name> \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global
- 创建健康检查。
gcloud compute health-checks create http http-basic-check \
--port 80
- 创建后端服务。
gcloud compute backend-services create web-backend-service \
--load-balancing-scheme=EXTERNAL \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
- 将实例组作为后端添加到后端服务。
gcloud compute backend-services add-backend web-backend-service \
--instance-group=ig-us-c1 \
--instance-group-zone=<your-vm-zone> \
--global
- 创建一个 URL 映射以将传入请求路由到默认后端服务。
gcloud compute url-maps create web-map-https \
--default-service web-backend-service
- 创建目标 HTTPS 代理以将请求路由到您的 URL 地图。
gcloud compute target-https-proxies create https-lb-proxy \
--url-map=web-map-https \
--ssl-certificates=www-ssl-cert
注意:[SSL 证书] 可以是 Self managed or Google managed; for testing purposes you can take a look at this document 描述 self-managed SSL 证书的用法。
- 创建全局转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create https-content-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=<ip-name> \
--global \
--target-https-proxy=https-lb-proxy \
--ports=443
- 创建一个 DNS 区域并记录指向 Load Balancer 外部 ip 地址。
gcloud beta dns managed-zones create example-zone --description="" --dns-name="example.com." --visibility="private" --networks="default"
gcloud beta dns record-sets transaction start --zone="example-zone"
gcloud beta dns record-sets transaction add <lb-public-ip-address> --name="*.example.com." --ttl="300" --type="A" --zone="example-zone"
gcloud beta dns record-sets transaction execute --zone="example-zone"
您可以使用命令进行测试:curl https://<hostname.example.com>