在 Phoenix 应用程序中,:http 和 :url 配置的 :port 键有什么区别?

In a Phoenix application, what is the difference between the :port key of the :http and :url configurations?

我目前在 Phoenix 应用程序中工作,在修改我的 /config/* 文件时遇到了这个问题。

目前我的端点配置包含以下内容:

config :my_app, MyApp.Endpoint,
  http: [port: 8080],
  url: [host: "example.com", port: 80]
...

阅读了 the :http config and the :url config 的两个文档后,我仍然不清楚:

每个 :port 配置的用途是什么,它们有何不同?

:url 中的 port 用于在应用程序中生成 URL(如 _url 路由器助手),而 :http 中的 port 是应用程序将 HTTP 服务器绑定到的 TCP 端口。这很有用,因为您的可公开访问的 URL 很可能是端口 80(默认 HTTP 端口)或 443(默认 HTTPS 端口),而您的应用程序可能 运行 在反向代理、负载平衡器或缓存后面的另一个端口上服务器(如 Nginx、HAProxy、Varnish)。如果两者只有一种配置,您将无法在服务器的一个端口上托管多个应用程序,同时仍然在 _url 路由器助手中生成有效的 URL。