如何在端口 443 上运行 Spring Boot

Posted

技术标签:

【中文标题】如何在端口 443 上运行 Spring Boot【英文标题】:How to run Spring Boot on port 443 【发布时间】:2021-01-29 01:37:16 【问题描述】:

我在我们的一个 Spring Boot 应用程序中遇到了问题。我们让它在端口 8443 上使用 https 运行,一切正常。现在我们正在构建与外部支付处理器的集成,它们要求我们在应用程序中的端口 443 上有一个回调端点。

一些研究告诉我,部署一个监听低于 1024 的端口号的 Spring boot 应用是不允许的。我在这个问题上找到的线程通常说“使用高于 1024 的端口号”,然后海报走 开开心心。我已经有了,需要找出一个使用端口 443 的解决方案。

有人有什么建议吗?我可以通过为回调端点构建一个 Apache 代理来解决这个问题吗?

我们在同一台服务器上有使用 Apache2 和端口 443 的 Web 应用程序,因此 Boot 应用程序需要与之共存。

【问题讨论】:

【参考方案1】:

有几种 Web-Server 或 Reverse-Proxy 解决方案,它们可以侦听端口 443 并将您的请求路由到 Spring Boot 应用程序服务器的端口 8443。

除了Apache2还有:

nginx:https://www.nginx.com/ haproxy : https://www.haproxy.org/

可能还有更多,但我目前使用的这 3 个。

如果您的应用程序在云中运行 - 云提供商通常还提供可以完成这项工作的服务,例如AWS ELB。

【讨论】:

感谢您的时间和精力,埃尔玛。我用 Apache 解决了这个问题,无需添加额外的软件。 Apache 也是附加软件,因为它不是 Spring Boot 的一部分。在我的回答中,我列出了替代它的 Apache。 是的,正确的。我应该说“给我们额外的软件”。我们拥有并使用 Apache。添加 Apache 已经可以做的事情对我们没有任何价值。【参考方案2】:

好的,我设法以一种非常简单而优雅的方式自己解决了这个问题。在此过程中,我还解决了 Spring Boot 应用程序必须在 URL 中使用端口号调用的问题,这一直困扰着我。

我找到了这个帖子:Spring Boot with embedded Tomcat behind Apache proxy

在其中,解决方案已经很详细了。我必须激活三个 apache2 模组:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers

我将这些行添加到我的 Apache2 vhost 配置文件中,就在 VirtualHost 标记中的 ServerName 下:

SSLProxyEngine on
ProxyPass / https://127.0.0.1:8443/
ProxyPassReverse / https://127.0.0.1:8443/
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPreserveHost On

8443 是 Spring Boot 应用程序使用的端口号,在 server.port 属性中配置。

另外,这也意味着我们不再需要在防火墙中打开引导应用程序使用的端口。

【讨论】:

以上是关于如何在端口 443 上运行 Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Debian 上以非 root 用户身份运行 Spring Boot 应用程序?

面试官:如何在自定义端口上运行 Spring Boot 应用程序?

Spring Boot 和 Apache2 在同一服务器和端口上

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

如何让 Tomcat 在 443 而不是其默认端口 8080 上运行? [关闭]

如何在 Spring Boot 中设置 ActiveMQ 端口?