google-app-engine - Google App Engine 为默认域提供错误的 HTTPS 证书
问题描述
我有一个 Google App Engine,我在其中部署了不同的服务,但为某些服务提供了错误的证书。
我不明白什么时候部署失败,但是当服务部署不起作用时,如果我再次尝试部署它也没关系,它仍然不起作用。
标准行为:
- 该应用程序部署到
https://<service>-dot-<project>.appspot.com
- 一切正常
错误行为:
- 该应用程序部署到
https://service.project.appspot.com
(请注意,该 url 有一个.
而不是-dot-
- 网址
-dot-
未解析 - 部署应用程序的 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
解决方案
经过一些调查,我找到了罪魁祸首:在文档中,部分service
,它说(强调我的):
每个服务和每个版本都必须有一个名称。名称可以包含数字、字母和连字符。它不能超过 63 个字符 ,并且不能以连字符开头或结尾。为每个服务和每个版本选择一个唯一的名称。不要在服务和版本之间重用名称。
这并不完全准确,因为根据RFC 1035,每个 DNS 标签最多可以包含 63 个字符,在我们的例子中,子域是<service>-dot-<project>
,这意味着<service>-dot-<project>
不能超过 63 个字符,因此service
不能超过(63 - len(project) - 5)
字符。
我使用的服务名称短于 63 个字符,但长于 (63 - len(project) - 5)
. 缩短服务名称可以解决问题。
推荐阅读
- apollo-server - Apollo server express - 如何在 Apollo 内省游乐场中启用跟踪?
- sql - postgresql 的 crypt() 函数如何知道密码与存储的密码匹配?
- mysql - Mysql中的多连接表只返回一行
- drupal - 记录 Drupal 的缓存重建
- javascript - flatpickr:按下图标时外部元素不起作用
- html - 在不安装 Node 的情况下从 Elixir 代码调用 JavaScript
- macros - 错误:“结构”表达式不在顶层
- python - 抓取动态谷歌新闻
- javascript - 调用背景图像不起作用 vue.js
- python - 如何使用我要获取的字典的一个键/值对从字典列表中访问字典