【问题标题】:How to make apache process TCP connections?如何使 apache 进程 TCP 连接?
【发布时间】:2012-11-01 16:25:22
【问题描述】:

我有一个问题困扰了我将近 24 小时,目前我不知道如何解决它。

事情是这样的:我想在我的服务器上有一个“主”套接字来处理所有传入的数据并使用 PHP 将其发送到其他客户端。那部分很好,但我想使用多个子域连接该套接字,例如例如.example.com。问题是,除非你有一个正在运行的套接字,否则你无法连接到该子域,这只会填满你的端口,这就是我想要阻止的。

最好的解决方案是让Apache处理传入的TCP请求,将数据保存在你正在连接的域上,然后将客户端重定向到主套接字,主套接字处理接收到的数据并在客户端被接受时立即执行。

老实说,我不知道该怎么做。我正在寻找几个小时,但我发现的唯一东西是 Stackoverflow 上接近它的东西:Apache - handling TCP connections, but not HTTP requests

但是使用那段脚本,我无法保存数据(您正在使用的域)并将其发送到主套接字。

我不知道这是否可以由 Apache 完成,或者是否有可能,或者是否有任何其他解决方法。

谢谢你:)

【问题讨论】:

  • 我对你想做什么感到困惑。套接字不会“在子域上运行”。域名映射到 IP。在处理 HTTP 请求时,Apache 使用“Host”HTTP/1.1 标头来区分一个虚拟主机和另一个虚拟主机。使用原始 TCP,您要么必须为每个子域使用单独的 IP,要么在自定义协议中发送所需的子域名。

标签: php apache sockets tcp subdomain


【解决方案1】:

您对子域感到困惑。套接字、TCP 和 IP 都对名称一无所知。直到网络堆栈出现多年后,DNS 才被发明出来。

因此,您可以将任意数量的域指向机器上的单个“套接字”端口。

Apache 可以根据传入连接的目标 IP 地址 (1) 或 HTTP/1.1“主机”标头 (2) 将传入请求路由到不同的“网络空间”(即虚拟主机)。前者是过去虚拟主机的做法,但现在几乎每个人都使用后者。

(1) 即使只有一个网卡,一台机器也可以有多个 IP 地址,但端口对于该机器上的任何给定协议都是唯一的。您将不同的域指向不同的地址,并在网络服务器上定义一个反向映射,以便它可以知道请求是如何开始的。

(2) “host”的值是提供给浏览器的 DNS 名称。由于这个值是显式传递给网络服务器的,所以该服务器不需要依赖像 #1 这样的技巧。

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2011-03-04
    • 2015-09-08
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多