|
apache和IIS共用80端口为了PHP与ASP各自的执行效率,要在服务器上安装iis与Apache,但是无法同时使用80端口,否则其中必定有一个启动不了。让它们共存的并且访问网站不需要加端口号,解决方法有如下: 方法一: IIS5,多IP下共存,IIS为 127.0.0.1,apache为 127.0.0.1c:\Inetpub\Adminscripts cscript adsutil.vbs set w3svc/disablesocketpooling true 该命令反馈如下disablesocketpooling : (BOOLEAN) True 重启IIS Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/disablesocketpooling true 由于 DisableSocketPooling 在 IIS 6.0 元数据库架构 (MBSchema.xml) 中被定义为有效属性,所以,仍然可以使用 Adsutil.vbs 设置该属性,但这种设置不起作用。IIS 6.0 中的功能是新增的核心级别驱动程序 HTTP.sys 的一部分。要配置 HTTP.sys,必须使用 Httpcfg.exe 方法二: IIS6,多IP下共存,IIS为 127.0.0.1,apache为 127.0.0.1到2003的CD下的 support/tools/Support.cab。解压出httpcfg.exe文件,COPY到windows/system32/目录下,用法看帮助 命令行 绑定到某IP: httpcfg set iplisten -i 127.0.0.1即命令使用IIS的只监听指定的IP及端口 查看绑定: httpcfg query iplisten 删除绑定: httpcfg delete iplisten -i 127.0.0.1命令行 net stop Apache2 net stop iisadmin /y net START Apache2 net START w3svc 保证iis下的ip设置为全局默认,Apache中httpconf设置listen 127.0.0.1:80,就应该可以两个服务同时运行,相互不冲突了。 IIS的访问地址为http://127.0.0.1,Apache访问地址为http://127.0.0.2 方法三: 将apache设为使用80端口,IIS使用其它端口,比如81,然后将apache作为IIS的代理。速度有影响. 在httpd.conf里面,取消下面四行的注释: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so 然后建立一个虚拟主机,将该域名的所有访问转向81端口。 <VirtualHost *:80> ServerName www.abd.com ProxyPass / http://localhost:81/ ProxyPassReverse / http://localhost:81/ </VirtualHost> 这样,对外就可以只需要一个端口,即可同时使用apache和IIS的功能了 使用第二种方法,可以在IIS上配置PHP4,Apache2中配置PHP5,只需要IIS中安装PHP4,把php.ini复制到\windows目录即可,Apache2中,只要把PHP5的php.ini放在PHP5安装目录里面就行了 配置Apache以支持PHP5: LoadModule php5_module "D:/PHPServer/PHP5/php5apache2.dll" AddType application/x-httpd-php .php DirectoryIndex index.html index.php PHPIniDir "D:/PHPServer/PHP5" 其中最重要的一条就是 PHPIniDir,用来指明php.ini文件所在位置,即PHP5的安装目录,注意所有目录的应该改为D:/PHPServer/PHP5这种格式,而非D:\PHPServer\PHP5,IIS的访问地址为http://127.0.0.1,Apache访问地址为http://127.0.0.2一台服务器共存jps、asp、php、asp.net也可以按照上面的思路,让apache、tomcat、IIS共存
2 i, O8 U; T4 D7 B我测试了下,按照上述的配置,访问是有问题的,也就是说我在本机访问localhost是不行的,由于这里的请求都被转发到了80端口。对于有两个域名的外网主机来说是可以实现的,个人认为。 由于没有测试,成功,所以有找了另外一种方法: 关于方法三,网络上还有另外一种说法: 1、apache 对php的支持很好,iis对php的支持也不错。但是apache对asp支持(除非装一个低效率的asp插件)几乎很烂。
9 B4 O4 r2 H& R2 m3 T* @2、iis对虽然能同时支持asp/php,但对于现在流行的urlrewrite 也就是静态网址就不如apache 的url重写效率高。虽然iis能装个rewrite插件(也是低效率),但不支持iis上的虚拟主机的url重写,只能对根网站、或者默认网站支持。apache的杀手锏就是支持虚拟主机的.htaccess 。所以apache的虚拟主机就可以随意支持url重写了。说了上面这么多废话。直接切入正题:实现服务器同时支持asp/php 并支持上面的虚拟主机的url重写。而且对外的端口都是80。/ { \: E: @* w% Q9 P: U! U; }
/ }* C/ }! Y! m5 X' Z$ J8 x
1、安装iis 配置iis(注意:iis里面的网站千万别用80端口)。效果如下:
) i, P9 X- ^) L$ N. b6 U$ K, l/ q#虚拟主机1
: b4 l# R) `2 e0 R; x0 Y- m主机头 www.abc.com 绑定地址:127.0.0.1 端口8080(也可以是其它端口) 这时候可以用http://www.abc.com:8080访问此网站了(已支持asp)& g5 t4 G1 x1 t- q, U) b
#虚拟主机2
2 {7 p) a8 z6 x; |1 g2 H8 D主机头 www.abd.com 绑定地址:127.0.0.1 端口8080.。。同上 这时候可以用http://www.abd.com:8080访问此网站了。5 f k+ _+ b6 S8 ]& h" Z
" [! u4 U# I j; i. ^% q2、安装apache 选择端口号:80
1 |3 W9 B$ e4 R) j3 D$ c
/ f" v( N; R5 D3 o8 napache的虚拟主机,相信大家都会配置,配置好php的运行。安装好后的部分虚拟主机配置如下6 }0 B0 i. M4 y) Q1 k
9 G5 a% F) o( p$ C& R
#新加的代理服务器(在http.conf配置文件里面找到下面四个把前面的#去掉,这是打开代理功能.)
" l3 L- g, D/ K, H3 v! |LoadModule proxy_module modules/mod_proxy.so
n1 ^; ~% l0 Y3 P) ?- s1 LLoadModule proxy_connect_module modules/mod_proxy_connect.so
3 s4 G( E+ L' B6 @% MLoadModule proxy_http_module modules/mod_proxy_http.so" ?' |8 W" R% {, W$ W4 h& t. S
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so2 F a7 D/ k4 T- _4 W
#虚拟主机3 r' C! A; R! L! f
, A, M) n' ]. j5 @<VirtualHost 127.0.0.1>
! d1 L' s* H$ L$ n& q! m; X; |#这是虚拟主机目录 g% B8 d: b: ]: o
DocumentRoot "e:/www/ghi"1 o- ^8 m& G4 V8 P1 a8 F% q
ServerName www.abd.com9 a( B: v) C f2 C
</VirtualHost>3 d) ]. y8 S$ w# k3 u0 A6 I0 S! }
4 J$ m% ^+ c" l$ r+ W% [
- C; L0 f. _$ n" `! p3 T( ^3 _0 F3 w#虚拟主机1的代理指向0 N/ ^ M% \: g, L* Y& K
#asp虚拟主机
& m( t8 T0 E. [& [% Y& v<VirtualHost 127.0.0.1>0 a# ?6 j( B, U4 G2 |
ServerName www.abc.com
% l- G$ {( X" TProxyPass / http://www.abc.com:8080/
; N, B! g4 ?+ `ProxyPassReverse / http://www.abc.com:8080/
% o$ H& `' Z! g, ?0 e! u- {</VirtualHost>: v# c3 O2 {+ y3 V, `
/ Q1 K$ P+ I& o X
' u& Y% N2 [( Y8 f! t$ m* L
------------------最终效果
: Z+ Z' ]! a3 N2 n$ V输入http://www.abc.com 访问到结果与http:/www.abc.com:8080一样的(但地址栏并不显示8080),这是由于apache代理到iis了。
, t+ L5 u; `9 V I+ y输入http://www.abd.com 是访问不了的 因为没有在apache里面做代理 而只能输入http://www.abd.com :8080才有结果. C$ V! { d o3 K' ~
输入http://www.abc.com 则直接由apache提供web服务。
/ d: _" F$ {% v; {
c( `$ G% b& Y6 H. k. Y6 papache的url重写大家应该知道怎么配置吧(不会上网搜,不是本文重点)。对虚拟主机做urlrewrite ,打开.htaccess支持功能就可以了。
0 M* V% \& W9 j! \5 o# w" }& T
' S) i z+ b) U8 F/ g; Y上面的结果已经很清楚了。如果www.abc.com 是asp网站。则在apache配置里面做代理就行了。, f- q; D/ ]! l0 E
如果www.abd.com 是php网站,则直接在 apache里面开虚拟主机。iis不会起到任何作用。
5 P7 P' n' ` [' F; V+ |* r e; @+ k; X2 {/ {3 L1 W# P2 c
1 _9 v6 |" y# l |