通过在另一个端口上运行的 nginx 服务器为在一个端口上运行的 Java 应用程序提供服务

通过在另一个端口上运行的 nginx 服务器为在一个端口上运行的 Java 应用程序提供服务

nginx我有一个正在通过 HTTPS (443)运行的 PHP 。我还有一个通过 HTTPS 端口 8443 运行的 Java 应用程序。

有没有办法可以通过 HTTPS (443) 公开 Java 应用程序?也许使用proxy_pass或其他东西(参见这里例如)?

我的目标是用户可以通过单个端口使用这两个应用程序:

  • https://server/ - 标准网页
  • https://server/java - 重定向到 Java 应用程序

答案1

这在“互联网上”确实得到了广泛的报道:研究“反向代理”和“服务器块”。

您的问题是单个 IP 地址只能有一个进程在端口上侦听 – 所以它是任何一个nginx或者您的 Java 应用程序。

现在,您可以配置 nginx 以响应特定的 HTTP 请求领域(不是 IP 地址,而是名称服务条目,例如“yourhost.com”)与其他地址不同。然后,您可以拥有两个“虚拟”域:

java.server 和服务器,并且根据您的客户端连接到哪个,nginx 将处理请求本身(导致您的 PHP 被执行)或充当反向代理(确实是proxy_pass,但这远不是唯一的方法事物)。

一般来说,要注意这个一定涉及解包 TLS(否则 nginx 无法知道所请求的域)并重新打包您的 HTTP 内容 - 即 Java 应用程序的 TLS 证书永远不会到达客户端。这通常可能很好,但如果您的客户端需要建立对 Java 应用程序的信任,那就别无选择。

如果这是内部网络,只需获取另一个 IP 地址即可。内部 IP 地址不需要任何费用。如果这是一个外部服务,请考虑是否可以仅转向 IPv6(通常一次获得一整块 IP 地址,并且不会出现此问题,因为每个服务都可以有自己的),或者是否可以你可以把东西放在不同的 IPv4 地址上。

相关内容