2012-11-13 31 views
1

我有一個問題在我的腦海中停留了將近24小時,而此時我不知道如何修復它。如何使apache進程的TCP連接?

這是事情:我想在我的服務器上有一個'主'套接字,用於處理所有傳入數據並將它發送給使用PHP的其他客戶端。這部分沒有問題,但我想用多個子域名連接到該套接字,例如ex.example.com。與此有關的是,你不能連接到該子域,除非你有一個套接字運行,並且只是填滿你的端口,這就是我想要阻止的。

最好的解決方案是讓Apache處理傳入的TCP請求,將數據保存在您連接的域中,然後將客戶端重定向到主套接字,該套接字處理接收到的數據,並在接受客戶端時立即採取行動。

老實說,我不知道該怎麼做。我正在尋找幾個小時,但我發現的唯一的東西是在Stackoverflow上接近它的東西:Apache - handling TCP connections, but not HTTP requests

但是對於那段腳本,我無法保存數據(您正在使用哪個域)並將其發送到主插座。

我不知道這是否可以通過Apache完成,或者如果有可能,或者有任何其他解決方法。

謝謝:)

+0

我很困惑你想做什麼。套接字不會「在子域上運行」。域名映射到IP。在處理HTTP請求時,Apache使用'Host'HTTP/1.1頭部來告訴另一個虛擬主機。對於原始TCP,您必須爲每個子域使用單獨的IP,或者在自定義協議中發送所需的子域名。 –

回答

0

您對子域名感到困惑。套接字,TCP和IP都知道絕對沒有什麼關於名字。直到網絡堆棧已經存在多年,DNS才被髮明出來。

因此,您可以在機器上的單個「套接字」端口指向任意數量的域。

Apache可以根據傳入連接(1)或HTTP/1.1「主機」標頭(2)的目標IP地址將傳入請求路由到不同的「網絡空間」(即虛擬主機)。前者是虛擬主機以前如何完成的,但現在幾乎每個人都使用後者。 (1)即使使用單個網卡,機器也可以擁有多個IP地址,但端口對於該機器上的任何給定協議都是唯一的。您可以將不同的域指向不同的地址,並在Web服務器上定義反向映射,以便可以知道請求是如何開始的。

(2)「host」的值是提供給瀏覽器的DNS名稱。由於該值顯式傳遞給網絡服務器,因此該服務器不需要依賴像#1這樣的技巧。