http 请求如何在已部署的 Spring Boot 应用程序中工作?
Posted
技术标签:
【中文标题】http 请求如何在已部署的 Spring Boot 应用程序中工作?【英文标题】:How do http requests work in deployed Spring Boot app? 【发布时间】:2020-09-02 12:26:16 【问题描述】:有人可以解释托管的工作原理吗?在我的 Spring Boot 应用程序中有嵌入式 tomcat 服务器。据我了解,spring 应用程序与 tomcat 一起运行,tomcat 需要一些端口,例如 8080,并监听来自该端口的请求(至少在本地部署时)localhost:8080。我可以从我的前端应用程序发出请求,该应用程序在 localhost:3000 上运行,tomcat 将接受请求,找到映射到前端请求被定向到“/user”或“/myposts”或其他任何东西的控制器的控制器,该控制器运行代码,与 db 对话将数据插入响应中,然后 tomcat 将其发送回前端。
如果我将我的应用程序部署到某个托管服务,例如 Google 云,那么 spring 应用程序是否仍然可以使用 tomcat 运行?在那种情况下,tomcat 将在哪个端口上运行,我的前端会将请求发送到哪里?到谷歌云为我的项目设置的子域?我需要在哪里配置 SSL/https?我的前端是否会通过 https 端点向 google 子域发送安全请求,并将这些请求通过 http(不安全,内部托管服务器)中继到部署的 spring 应用程序?或者怎么做?
【问题讨论】:
【参考方案1】:执行此操作的最直接方法之一是启动一个实例,通过 ssh 进入该实例并运行您的 Spring Boot 应用程序,就像在您的机器上运行它一样。一切都与该云实例上的工作方式相同。您的 Spring Boot 应用程序仍然在 tomcat 中运行,它仍然侦听端口 8080。唯一的区别是现在主机名不再是 localhost,而是该实例的 DNS 名称。您可以在控制台上找到 DNS 名称。
如果您想在 Spring Boot 应用程序中“本地”启用 https,则需要获得 SSL 证书。或者,您可以在云实例前设置负载均衡器或 API 网关来为您执行 SSL 终止。在这种情况下,您的前端会将请求发送到负载均衡器或 API 网关,而不是您的 Spring Boot 应用程序。他们接受 https 请求并将其转换为 http 请求并将其发送到您的 Spring Boot 应用程序。
【讨论】:
谢谢。这已经是有用的信息。我想澄清几件事,因为我是初学者。 nginx 可以用作这个“api 网关”吗?我听说过 Nginx 的“反向代理”,Nginx 会接受来自我前端的请求并将它们中继到运行在谷歌 VM 实例上的 spring 应用程序,这类似于“api 网关”吗?这是否意味着我必须为 Nginx 手动设置 SSL?另外,websockets 可以与“api gateway”一起使用吗?我知道 http 请求会被转发,但是 websockets 呢?另外,您听说过 Google“端点”服务吗?这些能满足我的需要吗? 是的,Nginx是常用的api网关。如果您完全从头开始设置 Nginx,那么是的,您需要获取 ssl 证书并配置您的 Nginx 以使用它来执行 ssl 终止。我更熟悉aws,但看起来谷歌端点服务正在做一个典型的api网关可以做的事情。 aws api gateway 支持 web socket api,所以我没有理由认为为什么 google 端点不支持。以上是关于http 请求如何在已部署的 Spring Boot 应用程序中工作?的主要内容,如果未能解决你的问题,请参考以下文章
尝试在已部署的反应客户端和快速服务器上上传图像文件时出现 503 错误,然后是 CORS 错误