请看一下下图。
这应该如何工作?
当远程请求 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
- lighttpd
- 磅
相关 RFC
- RFC2817(...解释如何使用 HTTP/1.1 中的升级机制在现有 TCP 连接上启动传输层安全性 (TLS)。这允许不安全和安全的 HTTP 流量共享相同的知名端口... )
- RFC2818(...描述如何使用 TLS 保护互联网上的 HTTP 连接。当前的做法是在 SSL(TLS 的前身)上分层 HTTP,通过使用不同的服务器端口来区分安全流量和非安全流量... )
答案1
一个港口统治所有港口,表明有人至少在 Java 世界中实现了它。
您是否曾在生产环境中部署过这样的解决方案?
我没有——也永远不会建议这样做。作为一名顾问,我试图鼓励我的客户使用标准化和经过验证的技术。除了极端情况外,似乎没有系统能够正确实施这些 RFC——而这不是我想要建议或支持的事情。
答案2
Apache 在这里帮不了你。它只能在任何给定端口上监听 HTTP 或 HTTPS 连接(不能同时监听两者)。
据我所知,没有“成熟的产品”可以实现此功能。请您的网络管理员在防火墙上再打一个洞,或者设置一个 VPN 或 SSH 隧道到外部端点,您可以在其中设置多个侦听端口。