为什么我们使用端口号localhost:8080?为什么我们在使用 www.example.com 时不使用端口号?
Why do we use port number localhost: 8080? Why don't we use a port number when using www.example.com?
当我在本地使用 Spring 启动应用程序时,它使用 localhost:8080
。当它被推送到 Pivotal Cloud Foundry 时,它有一些路由 https://my-app.xyz-domain.com
并且我们可以在没有端口的情况下访问 URL,幕后发生了什么?
请帮我理解。
如果指定 none,则浏览器使用的每个协议都有一个默认端口号。 https 是 443,http 是 80,telnet 是 23。
在 Unix 和 Linux 等类似系统上,这些通常对开发人员不可用,因此使用其他端口,但必须指定它们。 8080 经常可用,看起来像 80。
首先要把端口改成80或者443,因为HTTP对应80,HTTPS对应443,然后设置域名解析到当前主机,这样就可以访问当前通过域名申请。另外,如果要设置本地域名,那么hosts文件也要修改。
在 CloudFoundry 上,您的应用程序实际上仍在 运行ning localhost:8080
。您可以通过 https://my-app.xyz-domain.com 访问您的应用程序的原因是该平台处理将流量从 URL 路由到您的应用程序。
其工作方式如下:
您部署您的应用程序。它是 运行 由容器中的基础。容器被分配了一个端口,它通过 $PORT
env 变量提供给应用程序(这在技术上可以改变,但很长一段时间以来一直是 8080)。然后您的应用程序会监听 localhost:$PORT
或有效地 localhost:8080
.
平台还在您的容器中 运行s Envoy。它配置为侦听传入的 HTTP 和 HTTPS 请求,并将该流量代理到您在 localhost:$PORT
.
上的应用程序
使用 cf
cli,您可以将路由映射到您的应用程序。这是一个逻辑规则,告诉平台哪些外部流量应该进入您的应用程序。路由可以由主机名、域、and/or 路径组成。例如,my-cool-app.example.com
或 my-cool-app.example.com/foo
。要使路由生效,域必须将其 DNS 定向到平台。
当 end-user 访问您映射的路由时,DNS 解析到平台,流量被定向到外部负载平衡器(有时 TCP/layer4,有时 HTTPS/layer7) 坐在讲台前。这些代理不了解 CF,它们只是代理传入流量。
来自外部负载均衡器的流量分布在平台 Gorouter 集合中。 Gorouter 是第二层代理,但这些代理了解平台,特别是平台上映射的所有路由以及这些应用程序实际所在的位置。
当请求到达 Gorouter 时,它会像 my-cool-app.example.com
一样识别路由,并查找该应用所在容器的位置 运行ning。来自 Gorouter 的流量然后被代理到应用程序容器中 运行ning 的 Envoy。这与第二步相关,因为 Envoy 会将流量路由到您的应用程序。
总的来说,传入的请求是这样路由的:
Client/Browser -> External LBs -> Gorouters -> Envoy -> Application
当我在本地使用 Spring 启动应用程序时,它使用 localhost:8080
。当它被推送到 Pivotal Cloud Foundry 时,它有一些路由 https://my-app.xyz-domain.com
并且我们可以在没有端口的情况下访问 URL,幕后发生了什么?
请帮我理解。
如果指定 none,则浏览器使用的每个协议都有一个默认端口号。 https 是 443,http 是 80,telnet 是 23。
在 Unix 和 Linux 等类似系统上,这些通常对开发人员不可用,因此使用其他端口,但必须指定它们。 8080 经常可用,看起来像 80。
首先要把端口改成80或者443,因为HTTP对应80,HTTPS对应443,然后设置域名解析到当前主机,这样就可以访问当前通过域名申请。另外,如果要设置本地域名,那么hosts文件也要修改。
在 CloudFoundry 上,您的应用程序实际上仍在 运行ning localhost:8080
。您可以通过 https://my-app.xyz-domain.com 访问您的应用程序的原因是该平台处理将流量从 URL 路由到您的应用程序。
其工作方式如下:
您部署您的应用程序。它是 运行 由容器中的基础。容器被分配了一个端口,它通过
$PORT
env 变量提供给应用程序(这在技术上可以改变,但很长一段时间以来一直是 8080)。然后您的应用程序会监听localhost:$PORT
或有效地localhost:8080
.平台还在您的容器中 运行s Envoy。它配置为侦听传入的 HTTP 和 HTTPS 请求,并将该流量代理到您在
上的应用程序localhost:$PORT
.使用
cf
cli,您可以将路由映射到您的应用程序。这是一个逻辑规则,告诉平台哪些外部流量应该进入您的应用程序。路由可以由主机名、域、and/or 路径组成。例如,my-cool-app.example.com
或my-cool-app.example.com/foo
。要使路由生效,域必须将其 DNS 定向到平台。当 end-user 访问您映射的路由时,DNS 解析到平台,流量被定向到外部负载平衡器(有时 TCP/layer4,有时 HTTPS/layer7) 坐在讲台前。这些代理不了解 CF,它们只是代理传入流量。
来自外部负载均衡器的流量分布在平台 Gorouter 集合中。 Gorouter 是第二层代理,但这些代理了解平台,特别是平台上映射的所有路由以及这些应用程序实际所在的位置。
当请求到达 Gorouter 时,它会像
my-cool-app.example.com
一样识别路由,并查找该应用所在容器的位置 运行ning。来自 Gorouter 的流量然后被代理到应用程序容器中 运行ning 的 Envoy。这与第二步相关,因为 Envoy 会将流量路由到您的应用程序。
总的来说,传入的请求是这样路由的:
Client/Browser -> External LBs -> Gorouters -> Envoy -> Application