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

我正在尝试从 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'

这是我的主要功能


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))

}

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


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


我在这里想念什么?


繁星淼淼
浏览 110回答 1
1回答

慕田峪9158850

环境PORT变量将由 AppEngine 平台设置,您不必在app.yaml配置文件中设置它。事实上,你甚至无法覆盖它。查看运行时设置的环境变量列表。PORT因此,只需像在 Go 代码中一样使用环境变量,但将其从app.yaml配置中删除。您只需启动一个非 HTTPS Web 服务器,平台就会为您提供 HTTPS 支持。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go