如何通过单个端口处理加密和未加密的 http 连接

ale*_*ini 10 linux http nginx https lighttpd

请看下图。

替代文字

这应该如何工作?

  • 当远程请求 http://myhost.com:8080/* 时,请求应该转发到监听环回接口 8008 端口的 http 服务器。这是简单的部分。

  • 当远程用户请求 http://myhost.com:8080/specialurl ...

    • 充当应用程序级网关的程序应该能够将连接升级为加密会话(无需更改端口

    • 与远程浏览器建立加密会话后,应将请求转发给监听环回接口8000端口的C程序

我的问题是

  1. 您是否曾经在生产环境中部署过这样的解决方案?如果你有...
  2. 您使用什么产品作为应用程序网关?
  3. 你能提供一个配置示例吗?

硬限制

  • 无法控制防火墙,唯一可以让外部流量进入内部服务器的端口是 8080。端口号无关紧要,问题是在防火墙级别只有一个端口打开以转发传入到内部服务器的流量。
  • 内部服务器必须运行 Linux(目前它运行的是 Debian Lenny)
  • 远程用户只需要当前的 Web 浏览器和 Internet 连接即可访问此服务器。这意味着通过 SSH 进行反向端口转发在这里不是一个选项。
  • 我需要一个已经在生产中经过测试并且可以轻松部署的产品。我不打算开发自己的应用程序网关(如果是这样,我想我会在 Stack Overflow 上问这个问题,而不是在 Server Fault 上问这个问题)。

软限制

  • 我想避免将 Apache 作为应用程序网关(尽管如果这是唯一可能的选择,我愿意这样做)
  • 如果可能,应用网关应该是成熟的开源软件产品。

迄今为止尝试过的应用程序网关产品(未成功)

  • nginx
  • 轻量级

相关 RFC

  • RFC2817 ( ...解释了如何使用 HTTP/1.1 中的升级机制通过现有的 TCP 连接启动传输层安全 (TLS)。这允许不安全和安全的 HTTP 流量共享同一个众所周知的端口...)
  • RFC2818 ( ...描述了如何使用 TLS 来保护 Internet 上的 HTTP 连接。当前的做法是在 SSL(TLS 的前身)之上对 HTTP 进行分层,通过使用不同的服务器端口来区分安全流量和不安全流量... )

Sir*_*tan 1

一个端口统治所有这些,表明至少有人在 Java 世界中实现了它。

您在生产环境中部署过这样的解决方案吗?

我没有——也不会建议这样做。作为一名顾问,我尝试鼓励我的客户使用标准化且经过验证的技术。除了边缘情况之外,似乎没有系统能够正确实现这些 RFC,而这也不是我想要建议或支持的。