在Apache和Game Server之间拆分https

时间:2009-11-07 15:10:29

标签: java apache sockets ssl tcp

我希望Apache和游戏服务器都能在同一IP地址的端口443上访问。

游戏服务器连接是一种正常的TCP连接,它是在客户端登录并保持打开状态时建立的,直到客户端注销,可能是数小时后。

起初我虽然在反向模式下使用mod_proxy并让客户端开始与特定URL的请求进行通信,但我想这不会让我在客户端和游戏服务器之间进行长时间的双向通信。

另一个想法是在转发模式下使用mod_proxy_connect(当然使用严格的访问规则)并让客户端发送CONNECT请求。理论上这应该有用。

然而,两个提到的尝试都有一个巨大的问题:游戏服务器不再看到客户端的IP地址。不幸的是,这是一项艰难的要求。

撤销订单有同样的问题:如果我让游戏服务器侦听端口443并将Web请求转发给Apache,则.php程序和access.log将不再看到真正的ip地址。我有点担心这种方法会对游戏性能产生负面影响。 (特别是在大量不可缓存图像的页面上)

操作系统:Linux(Debian) 网络服务器:Apache 2 游戏服务器和客户端是用Java编写的

提前感谢任何想法。

3 个答案:

答案 0 :(得分:1)

您可以让Apache创建会话ID并将其存储到数据库中,然后使用mod_proxy_connect。当游戏服务器接受来自本地Apache的请求时,它应该从头部获取会话ID并从数据库中读取客户端的IP地址。

答案 1 :(得分:1)

你如何运行游戏服务器?如果它由Tomcat或Jetty运行,您可以尝试mod_jk

答案 2 :(得分:1)

根据您的描述,游戏服务器不是HTTP(s)服务器,它只使用端口443(客户端登录时建立的 TCP连接,并在客户端注销之前保持打开状态,也许几个小时后。

这听起来不像HTTP,即使使用keep alive,HTTP连接也不会超过几分钟。

如果游戏服务器不是HTTP,则无法使用HTTP代理进行通信。