请看下图。
这应该如何工作?
当远程请求 http://myhost.com:8080/* 时,请求应该被转发到监听环回接口的 8008 端口的 http 服务器。这是简单的部分。
当远程用户请求 http://myhost.com:8080/specialurl ...
充当应用程序级网关的程序应该能够将连接升级到加密会话(无需更改端口)
在与远程浏览器建立加密会话后,它应该将请求转发给监听环回接口的 8000 端口的 C 程序
我的问题是:
- 您是否曾经在生产环境中部署过这样的解决方案?如果你有...
- 您使用什么产品充当应用程序网关?
- 你能提供一个配置示例吗?
硬限制:
- 我无法控制防火墙,唯一可以让外部流量进入内部服务器的端口是 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 上分层 HTTP(TLS 的前身),通过使用不同的服务器端口来区分安全流量和不安全流量...... )
一个端口来统治所有这些,表明有人至少在 Java 世界中实现了它。
我没有——我也不会建议这样做。作为一名顾问,我试图鼓励我的客户使用标准化和经过验证的技术。除了边缘情况外,似乎没有系统能够正确实现这些 RFC——这不是我想要建议或支持的东西。
Apache在这里不会帮助你。它只能在任何给定端口上侦听 HTTP 或 HTTPS 连接(不能同时侦听)。
据我所知,没有实现此功能的“成熟产品”。让您的网络管理员在防火墙上再打一个洞,或者设置 VPN 或 SSH 隧道到外部端点,您可以在其中设置多个侦听端口。