我买了一台Slicehost VPS(最便宜的,256MB,运行Ubuntu),因为我有兴趣将我的Web开发经验/理解扩展到课堂之外。 我希望Slicehost运行(1)博客,(2)我可以用于私人组织目的的wiki(我自己和一些朋友),以及(3)多语言开发(Ruby,PHP,python )。 我所意识到的是,这有一些缺点。 首先,我会为每个访问者启动一个巨大而丑陋的Apache进程(不是我期望的),其次,这会使configuration成为一场噩梦。
有没有办法,我可以运行单独的Apache进程来处理每个程序,但以URL透明的方式吗? 我希望能够让blog.mywebsite.com只加载Movable Type的相关模块和configuration,而pydev.mywebsite.com只加载运行python的Apache的modules / config和railsdev.mywebsite。 COM运行在Apache / Passenger或其他。 我知道如何做到这一点,如果我愿意的url是mywebsite.com:8081/,mywebsite.com:8082/等,但有没有办法让一个服务器聆听* .mywebsite.com: 80并让它传递请求到适当的服务器(这是监听端口8081-8084左右)?
你想要的是一个反向代理configuration。 是的,这是可行的。 本质上,反向代理伪装成客户端的Web服务器。 然后,根据请求的域名,它可以代理连接到指定的后端networking服务器。
因此,您可以让不同的Web服务器在127.0.0.1上的不同端口上进行侦听,并将您的反向代理redirect到它们。
stream行的轻量级反向代理是清漆和磅 。 但是,即使是Apache也可以通过mod_proxyconfiguration成代理。 与lighttpd和nginx同上。
你需要一个反向代理,但请记住,因为你刚开始,如果你的目标是学习MT,Django,你不应该太担心开发服务器的apache进程,或者这个解决scheme有多丑。 RoR,你可能最好做独立的虚拟主机,或者在不同的端口上运行多个实例。 设置一个反向代理将会起作用,但是debugging问题会花费更长时间,因为您不知道代理是否正在动作,或者实际上是发送了错误的请求。 有了这个免责声明,你需要做的:apt-get install libapache2-mod-proxy-html a2enmod proxy_http
然后configuration你的默认虚拟主机像…
ProxyRequests Off ProxyPreserveHost On ProxyPass / http://localhost:8090/ ProxyPassReverse / http://localhost:8090/
凡localhost:8090指向你的MT实例,并重复这个过程,为不同的虚拟主机。
无论哪种方式,你将有一个丑陋的Apache进程设置:)。
扩大sybreon的答案:
反向代理是Web服务器的插件(在你的情况下是Apache),它将URL转换到你select的不同服务器上。
例如,如果/Wiki/有一个请求,Apache将会看到它,并将你的请求转发给example.com:81 (或者你指定的任何东西 – 你可以使用RegEx来只转发部分或全部的请求,安排,做任何事情),并将无论它收到的前进。
这个方法的好处是你可以混合使用技术。 我们有一个IIS网站,在两个完全不同的盒子上做一个Subversion和Apache的反向代理,但是只有一个公共地址空间。
mod_proxy是你所寻求的答案。 虽然,您将需要为每个网站设置一个Apache进程。 如果您只是加载所有需要的模块,并根据需要为每个虚拟主机启用它,则内存效率可能会更高。
只要小心古怪。 有些程序可能会有这样的问题。