为什么应用程序引擎忽略 app.yaml 中的 PORT 环境变量

Cha*_* Li 2 port google-app-engine go

我正在尝试从 Go 1.9 迁移到 Go 1.11。我从迁移文档中复制了main函数

这是我的 app.yaml

runtime: go111
env: standard
instance_class: F1
handlers:
  - url: /.*
    script: auto
    secure: always
    redirect_http_response_code: '301'
  - url: .*
    script: auto
env_variables:
  PORT: '443'
Run Code Online (Sandbox Code Playgroud)

这是我的主要功能

func main() {
    http.HandleFunc("/demo", demoHandler)

    port := os.Getenv("PORT")
    if port == "" {
            port = "443"
            syslog.Printf("Defaulting to port %s", port)
    }

    syslog.Printf("Listening on port %s", port)
    syslog.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序需要使用 HTTPS 在端口 443 上运行。但是,部署后,应用程序没有响应。我检查了日志,它显示“正在侦听端口 8081”。我不明白为什么需要8081而不是443。这个8081是哪里来的?

如果我对 main 函数进行硬编码以使用端口 443。它会在日志中显示“应用程序正在侦听端口 443,它应该侦听 PORT 环境变量定义的端口。因此,nginx 无法启动。性能可能会降级。请监听 PORT 环境变量定义的端口。”

我在这里想念什么?

icz*_*cza 5

环境PORT变量将由 AppEngine 平台设置,您不必在app.yaml配置文件中设置它。事实上,你甚至无法覆盖它。

查看运行时设置的环境变量列表

PORT因此,只需像在 Go 代码中一样使用环境变量,但将其从app.yaml配置中删除。您只需启动一个非 HTTPS Web 服务器,平台就会为您提供 HTTPS 支持。