如何在带有嵌入式 tomcat 的 Spring Boot App 中设置域名

Posted

技术标签:

【中文标题】如何在带有嵌入式 tomcat 的 Spring Boot App 中设置域名【英文标题】:How to set Domain name in Spring Boot App with embedded tomcat 【发布时间】:2018-03-06 00:55:52 【问题描述】:

我正在使用嵌入式 tomcat 在 Spring Boot 中开发应用程序。在我的本地运行在端口 8080 上,我可以提供 url http://locahost:8080。如何将其更改为我的域?像www.mydomain.com 应该与本地主机类似。如何配置这个?我使用的是嵌入式 tomacat 不是外部安装的 tomcat 服务器。

【问题讨论】:

你是把这个域指向你当前的机器还是另一个服务器? 当前机器。我也必须在服务器中设置 我们如何为使用嵌入式 tomcat 的应用程序配置子域?注意:我还有其他应用程序在同一台服务器上运行,它们使用普通的 apache 服务器并在端口 80 上运行。我已经为它定义了各种虚拟主机。我也想为嵌入式 tomcat 提供类似的东西。 【参考方案1】:

首先你需要注册一个域名。

那么您需要在本地或云端拥有一台机器,其公共 IP 地址映射到您注册的域,并且打开了正确的端口 (80)。

然后您需要启动 Spring Boot 应用程序以在端口 80 而不是 8080 上运行。您可以通过使用 CLI 参数 --server.port=80 或在 application.properties 文件或 application.yaml 文件中添加 server.port=80 来做到这一点。

【讨论】:

映射来自域。是域名指向IP地址(使用DNS),而不是IP地址指向域名。【参考方案2】:

如果您将此 Spring Boot 应用程序部署为您的 主要 服务,而不是在已安装 Apache Web Server 的服务器上运行它,则可以手动设置端口 80,该端口用于 >HTTP 请求。 443 被加密,因此 HTTPS。您可以在服务器的防火墙上设置这些设置。

然而,如果这个 Spring boot 应用恰好是一个 API,它只是你想从你的服务器上的网站访问的端点(运行在 Apache Web 之类的东西上)服务器),您将需要设置反向代理,否则他们都将尝试使用端口 80:

https://medium.com/@codebyamir/using-apache-as-a-reverse-proxy-for-spring-boot-embedded-tomcat-f704da73e7c8

因此,您应该在 Spring 应用程序(运行嵌入式 tomcat 服务器)上将端口保留为 8080,并且您的 Apache Web 服务器应该使用端口 80,例如,您的网站 www.mydomain.com。

因此,代理会将传入的 HTTP 请求重定向到端口 8080 上的 Tomcat 服务,因此端点将通过 www.mydomain.com/api-end-point-here 触发

【讨论】:

【参考方案3】:

您不必在应用程序的任何地方指定域名。

在SpringBoot项目中打开application.properties文件(src/main/resources下)

并配置您要运行应用程序的端口

server.port = XXXX

其中 XXXX 是端口号。(如果您不想在访问应用程序时提供端口,则为 80)

唯一需要做的额外配置是更新 DNS 以将 mydomain.com 指向您机器的 IP 地址。目前,由于您使用的是本地计算机,您可以通过编辑主机文件 (C:\Windows\System32\drivers\etc) 来测试重定向是否有效 保留此映射。

注意:只有当您仅从您的计算机访问域时,此编辑才能让您进行测试。

【讨论】:

以上是关于如何在带有嵌入式 tomcat 的 Spring Boot App 中设置域名的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中关闭嵌入式 Tomcat?

带有嵌入式 Tomcat 的 Jndi Mongodb Spring Boot,[重复]

带有嵌入式tomcat的Spring Boot +带有身份验证用户的访问日志

如何将简单的 Spring Boot(带有 Gradle 构建系统)部署到 Apache Tomcat(真实服务器,而不是嵌入服务器)?

使用带有嵌入式 Tomcat 的 Spring Boot Weblfux

带有嵌入式 Tomcat 的 Spring Boot 忽略了方法角色