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


10

请看下图。

替代文字

这应该如何工作?

  • 当远程请求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的
  • lighttpd

相关RFC

  • RFC2817(... 说明了如何使用HTTP / 1.1中的升级机制通过现有的TCP连接来发起传输层安全性(TLS)。这允许不受保护的HTTP流量共享相同的知名端口。)
  • RFC2818(... 描述了如何使用TLS来保护Internet上的HTTP连接。目前的做法是在SSL(TLS的前身)上对HTTP进行分层,通过使用不同的服务器端口来区分安全流量和不安全流量 ... )

“当远程用户请求http:// myhost.com:8080/specialurl ...充当应用程序级别网关的程序应该能够将连接升级到加密的会话(无需更改端口)”在客户端这可能吗?客户端浏览器是否支持通过不包含https的URL运行SSL?
亚当·布兰德

嗨,亚当,谢谢您的评论。请求myhost.com:8080/specialurl之后,应将浏览器重定向到myhost.com:8080/specialurl。我不确定其他浏览器,但是Opera和Firefox的最新版本似乎对此没有问题。
alemartini

Answers:


1

一个将它们全部统治的端口,表明有人至少在Java世界中实现了它。

您是否曾经在生产环境中部署过这样的解决方案?

我没有-我也永远不会建议这样做。作为顾问,我尝试鼓励我的客户使用标准化和成熟的技术。除了边缘情况外,似乎没有任何系统可以正确地实现这些RFC,而这并不是我想要建议或支持的。


斯坦,您好,感谢您的反馈。我并不了解Grizzly,但不幸的是,我对Java不熟悉。您是否曾经在生产环境中部署过这样的解决方案?如果您可以分享一个示例来说明如何做到这一点,那就太好了。再次感谢亚历克斯。
alemartini

好的,谢谢您编辑答案并添加更多信息。如您所见,我现在缩小了问题范围,更清楚地表明我正在寻找成熟的产品。让我们看看是否有人对此提出了一个很好的答案。很难相信Apache是​​Linux世界上唯一支持RFC2817的应用程序。但是,如果是这样的话,或者如果没有其他人具有在其他产品中部署类似产品的真实经验,那么我认为除了尝试使用Apache解决此问题之外,我别无选择。
alemartini

0

Apache不会在这里为您提供帮助。它只能在任何给定端口上侦听HTTP或HTTPS连接(不能同时侦听)。

据我所知,尚没有实现此功能的“成熟产品”。让您的网络管理员在防火墙上向您打另一个孔,或者设置一个VPN或SSH隧道到外部端点,您可以在其中设置多个侦听端口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.