我想知道是否有可能在本地监听onlu的服务器上创建一个php代理,以便php网关是公共的,它会将所有内容定向到侦听localhost的服务器。
这个服务器将是mercurial的hg服务,它只能侦听127.0.0.1,php会进行身份验证。
您认为可以做到吗?任何人都知道如何在php中创建一般代理,这样不仅http get工作,而且hg push?
我知道有很多方法可以使用auth来托管mercurial repo,但它是在插件计算机上,我没有足够的空间来容纳更多的应用程序等。
答案 0 :(得分:2)
您无需运行hg serve
。
相反,请使用hgweb.cgi
或hgwebdir.cgi
。这些是可以在Apache下运行的标准CGI脚本。 hgweb.cgi
提供单个存储库,hgwebdir.cgi
提供多个存储库。它们不需要在Apache上安装任何特殊模块,您可以使用Apache的所有内置访问控制和身份验证机制。
Mercurial wiki上的最佳参考是PublishingRepositories,它解释了如何执行此操作并比较其他选项,包括ssh
,这需要更少的设置。
答案 1 :(得分:2)
如果您真的想使用PHP,可以使用套接字功能来执行您想要的任何网络。 (http://ch.php.net/manual/en/ref.sockets.php)您可以使用fsockopen连接到您想要的任何内容。您可以将它组合在一起,并在由控制台运行的PHP脚本中使用它。重复使用set_time_limit以保持代理运行。你需要很多知识和运气来完成这项工作。
但实际上你真的很喜欢你正在做什么(见其他答案和评论)。无论你对这种配置有什么理由,都是错误的。
答案 2 :(得分:1)
如果你在apache中运行你的php,那么你可以用php做你想要的。只需将apache配置为代理到hgserve(假设您无法运行wsgi或cgi,这是更好的解决方案)并且您已设置。我认为没有任何东西可以添加到PHP领域,而apache和hgserve还没有提到这一点。
但是,是的,您可以在PHP中重新实现Apache的代理功能,但您还需要确保包含对RangeRequests的支持,这在某些情况下会使用。不要忘记您的RFC2616缓存逻辑(If-headers,Cache-Control,Expires,Last-Modified等)以提高效率......