2010-03-27 113 views
0

我想知道是否有可能創建一個php代理服務器,在本地監聽onlu,使php的網關是公開的,它將一切都指向監聽本地主機的服務器。php代理到本地mercurial服務器

此服務器將是mercurial的hg服務,只監聽127.0.0.1和PHP將執行身份驗證。

您認爲這是可以做到的嗎?任何人都有一個想法如何在PHP中製作一個通用代理,這樣不僅http獲得成功,而且還能夠推動hg?

我知道有辦法來承載具有權威性善變的回購,但它是一個插電腦上,我沒有很多空間,更多的應用程序等

+1

我不明白。這聽起來像你想製作一個自制的代理,你將暴露在互聯網(!!)。而且您希望這樣做,而不是使用Mercurial的內置服務器,您也可以在同一臺PC上同時運行該服務器。我必須錯過一些東西...... – Nate 2010-03-27 23:03:36

+0

這只是想通過apache將驗證添加到幾乎沒有配置的hg服務器。我不確定它是否可以工作。 – naugtur 2010-03-27 23:15:53

+0

我明白了。我會在下面添加一個答案。 – Nate 2010-03-27 23:43:56

回答

2

您不需要運行hg serve。可以使用hgweb.cgihgwebdir.cgi。這些是可以在Apache下運行的標準CGI腳本。 hgweb.cgi服務於一個存儲庫,並且hgwebdir.cgi服務於多個存儲庫。他們不需要在Apache上安裝任何特殊模塊,並且可以使用所有Apache的內置訪問控制和身份驗證機制。

Mercurial wiki上的最佳參考是PublishingRepositories,它解釋瞭如何做到這一點,並且還比較了其他選項,包括ssh,這需要更少的設置。

1

如果你正在運行在Apache中你的PHP ,那麼你可以用php來做你想做的事情。只需配置apache以代理hgserve(假設您不能運行wsgi或cgi,這是更好的解決方案)並且您已設置。我不認爲有什麼補充在PHP的土地,Apache和HGserve還沒有帶來的表。

但是,是的,您可以在PHP中重新實現Apache的代理功能,不過您還需要確保包含對RangeRequests的支持,這是對mercurial在某些情況下使用的支持。不要忘了您的RFC2616緩存邏輯(如 - 標頭,緩存控制,過期,最後修改等)以提高效率...

2

如果你真的想使用PHP,你可以使用套接字功能來做任何你想要的網絡。 (http://ch.php.net/manual/en/ref.sockets.php)您可以使用fsockopen連接到任何你想要的。你可以結合使用它並將它用在你通過控制檯運行的PHP腳本中。重複使用set_time_limit以保持代理運行。你需要很多知識和運氣來完成這件事。

但實際上這真的是你在做什麼(見其他答案和評論)。無論您對此配置有何理由,都是錯誤的。