熊伟杰的博客 ~ Xwjie


Windows下让Apache与IIS共用80端口使支持ASP

2011/08/14th | 2 Comments |Views: 9509 | Posted in 网络开发, 首页文章 | by xwjie(风待).

我们知道在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/看看吧

以上介绍了两种让Apache和IIS在80端口和平共处的方法,如果你还有更好的方法,请不吝赐教,遇到任何问题请在下面留言。

Back Top

  1. 80后    2011/08/23 - 18:05   (GMT+8) #1 Reply

    我其实只是想说,密码很火

  2. 匿名    2015/05/27 - 11:24   (GMT+8) #2 Reply

    :cry: 8) :-? :!: `

Leave a Reply
Name *(必填)
Email (选填)
Website (选填)
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:
  (Put code in between `backticks` ,e.g. `<div>hello</div>`)