apache和IIS共用80埠為了PHP與ASP各自的執行效率,要在伺服器上安裝iis與Apache,但是無法同時使用80埠,否則其中必定有一個啟動不了。讓它們共存的並且訪問網站不需要加埠號,解決方法有如下:

方法一:

IIS5,多IP下共存,IIS為219.153.70.251,apache為219.153.70.252

c:\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為219.153.70.251,apache為219.153.70.252

到2003的CD下的 support/tools/Support.cab。解壓出HTTPcfg.exe檔,COPY到windows/system32/目錄下,用法看説明

命令列

綁定到某IP: HTTPcfg set iplisten -i 219.153.70.251

即命令使用IIS的只監聽指定的IP及埠

查看綁定: HTTPcfg query iplisten

刪除綁定: HTTPcfg delete iplisten -i 219.153.70.251

命令列

net stop Apache2

net stop iisadmin /y

net START Apache2

net START w3svc

保證iis下的ip設置為全域預設,Apache中HTTPconf設置listen 219.153.70.252:80,就應該可以兩個服務同時運行,相互不衝突了。

IIS的訪問位址為HTTP://219.153.70.251,Apache訪問位址為HTTP://219.153.70.252

方法三:

將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.xiaotai.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://219.153.70.251,Apache訪問位址為HTTP://219.153.70.252

一台伺服器共存jps、asp、php、asp.net也可以按照上面的思路,讓apache、tomcat、IIS共存



我測試了下,按照上述的配置,訪問是有問題的,也就是說我在本機訪問localhost是不行的,由於這裡的請求都被轉發到了80埠。對於有兩個功能變數名稱的外網主機來說是可以實現的,個人認為。

由於沒有測試,成功,所以有找了另外一種方法:

關於方法三,網路上還有另外一種說法:

1、apache 對php的支援很好,iis對php的支援也不錯。但是apache對asp支援(除非裝一個低效率的asp外掛程式)幾乎很爛。
2、iis對雖然能同時支援asp/php,但對於現在流行的urlrewrite 也就是靜態網址就不如apache 的url重寫效率高。雖然iis能裝個rewrite外掛程式(也是低效率),但不支援iis上的虛擬主機的url重寫,只能對根網站、或者預設網站支援。apache的殺手鐧就是支援虛擬主機的.htaccess 。所以apache的虛擬主機就可以隨意支援url重寫了。說了上面這麼多廢話。直接切入正題:實現伺服器同時支援asp/php 並支援上面的虛擬主機的url重寫。而且對外的埠都是80。

1、安裝iis 配置iis(注意:iis裡面的網站千萬別用80埠)。效果如下:
#虛擬主機1
主機頭 www.abc.com 綁定位址:127.0.0.1 埠8080(也可以是其它埠) 這時候可以用HTTP://www.abc.com:8080訪問此網站了(已支援asp)
#虛擬主機2
主機頭 www.def.com 綁定位址:127.0.0.1 埠8080.。。同上 這時候可以用HTTP://www.def.com:8080訪問此網站了。

2、安裝apache 選擇埠號:80

apache的虛擬主機,相信大家都會配置,配置好php的運行。安裝好後的部分虛擬主機配置如下

#新加的代理伺服器(在HTTP.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
#虛擬主機3

<VirtualHost 127.0.0.1>
#這是虛擬主機目錄
DocumentRoot "e:/www/ghi"
ServerName www.ghi.com
</VirtualHost>


#虛擬主機1的代理指向
#asp虛擬主機
<VirtualHost 127.0.0.1>
ServerName www.abc.com
ProxyPass / HTTP://www.abc.com:8080/
ProxyPassReverse / HTTP://www.abc.com:8080/
</VirtualHost>


------------------最终效果
輸入HTTP://www.abc.com 訪問到結果與HTTP:/www.abc.com:8080一樣的(但網址列並不顯示8080),這是由於apache代理到iis了。
輸入HTTP://www.def.com 是訪問不了的 因為沒有在apache裡面做代理 而只能輸入HTTP://www.def.com:8080才有結果
輸入HTTP://www.ghi.com 則直接由apache提供web服務。

apache的url重寫大家應該知道怎麼配置吧(不會上網搜,不是本文重點)。對虛擬主機做urlrewrite ,打開.htaccess支援功能就可以了。

上面的結果已經很清楚了。如果www.abc.com 是asp網站。則在apache配置裡面做代理就行了。
如果wwww.ghi.com是php網站,則直接在 apache裡面開虛擬主機。iis不會起到任何作用。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()