【问题标题】:Google App Engine serves wrong HTTPS certificate for default domainGoogle App Engine 为默认域提供错误的 HTTPS 证书
【发布时间】:2019-03-05 22:44:13
【问题描述】:

我有一个 Google App Engine,我在其中部署了不同的服务,但为某些服务提供了错误的证书。

我不明白什么时候部署失败,但是当服务部署不工作时,如果我再次尝试部署它也没关系,它仍然不工作。

标准行为

  • 应用部署到https://<service>-dot-<project>.appspot.com
  • 一切正常

错误行为

  • 应用部署到https://service.project.appspot.com注意url有.而不是-dot-
  • -dot- 的 url 未解析
  • 部署应用程序的 url 为 *.appspot-preview.com 提供证书,我无法绕过它,因为存在 HSTS

GCP 控制台不报告任何内容:控制台中的所有链接都指向所谓的正确 url(带有-dot- 的那个),给了我一个未解析的域。唯一显示有效url的地方是部署后的终端中

我使用gcloud app deploy --project ${PROJECT} --version ${COMMIT_SHA} 进行部署,而我的app.yaml 是:

runtime: python27
service: <service_name>
threadsafe: true
api_version: 1

handlers:
- url: /
  static_files: dist/index.html
  upload: dist/index.html
  secure: always

- url: /(.*)
  static_files: dist/\1
  upload: dist/(.*)
  secure: always

【问题讨论】:

  • URL 不是服务部署的哪里,是服务响应的(或者不响应,如果它足够错误的话)。尝试使用错误版本的版本# (COMMIT_SHA),但同时部署一个好的版本(否则坏的版本仍然存在,当然,坏的)。但是我无法想象纯静态站点怎么会出错。你能显示错误的部署日志吗?
  • @DanCornilescu 部署是成功的,在日志中工作部署和故障部署之间的唯一区别是它说要到达的 URL。如果我将提交部署到工作服务,它就可以工作。

标签: google-app-engine google-cloud-platform


【解决方案1】:

经过一些调查,我找到了罪魁祸首:在documentationservice 部分,它说(强调我的):

每个服务和每个版本都必须有一个名称。名称可以包含 数字、字母和连字符。 不能超过 63 个字符 并且不能以连字符开头或结尾。为每个人选择一个唯一的名称 服务和每个版本。不要在服务和服务之间重用名称 版本。

这并不完全准确,因为对于 RFC 1035,每个 DNS 标签最多可以包含 63 个字符,在我们的例子中子域是 &lt;service&gt;-dot-&lt;project&gt;,这意味着 &lt;service&gt;-dot-&lt;project&gt; 不能超过 63 个字符,所以 @987654327 @不能长于(63 - len(project) - 5) 字符。

我使用的服务名称少于 63 个字符,但比 (63 - len(project) - 5) 长。缩短服务名称可以解决问题。

【讨论】:

  • 不错的收获!您可能希望更加严格,以允许 targeted routing(其中服务版本也包含在 URL 中)工作。
  • 你好@rpadovani!如果您找到的这个答案对您的问题满意,您能否接受它,以便其他可能有相同问题的用户更好地了解它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多