我们知道在IIS7推出后PHP的执行效率有了较大的提高,但是最大的困扰是IIS的URL Rewrite远没有Apache下方便,并且我们的产品环境更多的是Apache,所以Apache始终是我首选的。但是偶尔想调试一些ASP程序的时候怎么办,经常的,一些老的程序没有考虑到端口问题,在IIS用非80端口调试这些老ASP程序的时候链接经常出错。为此我们不得不停止Apache而腾出80端口才能启动IIS,否则会遇到错误:
有什么办法可以让他们和谐共存呢?Apache提供了强大的Proxy模块,我们通过配置Apache的URL重写就可以实现在Apache下把ASP请求甚至所有请求都通过Apache Proxy到IIS处理。
方法1:仅转发.asp文件的请求到IIS
1.首先停止Apache;
2.编辑Apache的配置文件:apache\conf\httpd.conf 找到以下两项,把前面的注释符号 # 去掉使之加载Proxy模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
3.启动Apache;
4.在IIS新建站点,只绑定84端口,并把网站根目录设为和APACHE一致。新建后确认启动这个站点(图中为“For_Apache”)
5.在Apache的网站根目录新建(已存在的话就编辑它)一个“.htaccess”文件内容如下(点此下载)RewriteEngine On
RewriteBase /
RewriteRule ^/*(.*)\.asp http://%{SERVER_NAME}:84/$1\.asp [P]
更新,使用下面的rewrite规则应该会更好RewriteEngine On
RewriteBase /
RewriteRule ^/(.*\.asp.*) http://%{SERVER_NAME}:84/$1 [P]
这里解释一下,这个文件的最后一行是只把所有扩展名为 .asp 的文件转发到本地服务器的84端口处理(返回结果由Apache输出给客户端浏览器)
6.没有第六步了,复制一些ASP脚本到你的Apache网站目录,打开你的浏览器测试一下吧
方法2:通过Apache的虚拟主机把全部请求转发到IIS
或许你觉得上面的方法够彻底,不是100%的IIS环境,又或者你不喜欢把Apache的根目录和IIS共享,那么你可以试试这种方法。
1.首先停止Apache;
2.编辑Apache的配置文件:apache\conf\httpd.conf 找到以下两项,把前面的注释符号 # 去掉使之加载Proxy模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
3.继续编辑 httpd.conf 在文件最后加入以下内容:
ServerName xwjie.iis
ProxyPass / http://127.0.0.1:84/
ProxyPassReverse / http://127.0.0.1:84/
这里也解释一下,第一行是你要绑定的主机的名字,如果是本地测试可以随便输入然后通过下面第6步的改host文件。如果是实际产品环境可以直接写域名如: ServerName www.xwjie.com 然后修改 www.xwjie.com 的DNS指向本机的IP。
4.启动Apache
5.在IIS新建站点,绑定84端口,网站根目录随意
6.因为这里绑定的主机名xwjie.iis是不存在的,所以我们要改Host把它指向127.0.0.1。打开C:\Windows\System32\drivers\etc目录下的“host”文件,加入一行:127.0.0.1 xwjie.iis
7.好了,现在可以打开你的浏览器,访问http://xwjie.iis/看看吧