Apache:支持[PHP|Python|Ruby]的虚拟主机
我正在尝试学习几种编程语言(比如Python、Ruby等),我想知道有没有办法优化我的Apache服务器,让它只在特定的虚拟主机中加载某些模块,比如:
http://myapp1 <- just with Ruby support
http://myapp2 <- just with Python support
http://myapp3 <- just with Php support
...
谢谢。
4 个回答
0
我觉得唯一的办法就是建立一个“代理”网站服务器,它负责把请求转发到真正的服务器上……
这个代理服务器有一个域名和服务器端语言的对应列表,它的工作就是透明地把请求重定向到正确的真实服务器上。
有N个真实服务器,每个服务器都有特定的配置,并且只支持一种语言……当然,每个服务器会监听不同的端口,最终可能只在本地回环设备上工作。
Apache的mod_proxy功能可以完成这个任务。
这是我个人的看法。
0
我觉得这不太可能,因为:
- 同一个线程或者分叉的进程可能会为不同的虚拟主机提供服务。所以如果它只加载了Python,当需要提供Ruby服务时会发生什么呢?
- 基于第一个原因,有些指令是针对整个网络服务器的,而不是特定于某个虚拟主机的。比如MaxRequestsPerChild、LoadModule等指令就是这样的。
3
每个Apache工作进程都会加载所有模块,所以在Apache内部是无法做到这一点的。
你需要做的是把你的语言模块移到Apache工作进程之外的其他进程中。
对于你的语言,可以使用以下模块来实现:
- PHP: 使用 mod_fastcgi。更多信息可以查看 Apache+Chroot+FastCGI。
- Python: 使用 mod_wsgi,并在 守护进程模式下运行。
- Ruby: 使用 passenger/mod_rack