此页面(https://cloud.google.com/appengine/docs/standard/nodejs/mapping-custom-domains)指出:
使用子域
如果您为自定义域设置了通配符子域映射,则您的应用程序将为任何匹配的子域提供请求。
- 如果用户浏览与应用程序版本名称或服务名称匹配的域,则该应用程序将提供该版本。
- 如果用户浏览与服务名称匹配的域,则该应用程序将提供该服务。
此外,此页面(https://cloud.google.com/appengine/docs/standard/java/how-requests-are-routed)指出:
向
default
服务中特定版本的可用实例发送请求:
https://[VERSION_ID]-dot-[MY_PROJECT_ID].appspot.com
http://[VERSION_ID].[MY_CUSTOM_DOMAIN]
我为App Engine项目提供以下服务:
以及此服务的以下版本:
"1"
是默认版本。 "test1"
是测试版本。
但是,当我在浏览器中输入https://test1.mycustomdomain.com时,它将提供默认版本,而不是"test1"
版本。
如果我在浏览器中输入https://test99.mycustomdomain.com,则会看到错误页面,因为此版本不存在(如预期的那样)。
URL https://test1-dot-MY_PROJECT_ID.appspot.com/可以正常工作(即提供"test1"
版本)。
这些是我配置的域:
如何让App Engine将请求路由到正确的版本?
答案 0 :(得分:2)
任何直接映射到您的应用程序的域都会提供默认服务。如果test1.mycustomdomain.com
被映射为自定义域,它将始终为1
服务(默认)。
要为具有自定义域的已命名GAE版本提供服务,您需要使用通配符(*.mycustomdomain.com
)映射该域,并删除与您的版本冲突的其他映射子域。有效的映射域的示例为:
mycustomdomain.com
www.mycustomdomain.com
*.mycustomdomain.com
通过该设置,test1.mycustomdomain.com
应该提供正确的版本test1
。
修改
关于通配符映射和HTTPS
GCP documentation about wildcard mapping指出:
注意:托管的SSL证书不支持通配符映射。
这可能导致人们认为通配符映射不支持HTTPS。该文档引用了managed certificates that GAE provides。如果您使用自己的SSL证书,则App Engine会执行support SSL certificates for wildcards:
某些App Engine功能使用special subdomains。例如,应用程序可以使用子域来寻址应用程序服务,或寻址不同版本的应用程序。要将它们与SSL一起使用,则有必要设置SAN或通配符证书。通配符证书仅支持一级子域。