使用Apache反向代理实现全能主机的搭建
閑談:
很多站長在購買虛擬主機的時候,會看虛擬主機的一些參數,其中最重要的就是支持的程序語言。現在很多IDC商家都在宣稱全能主機。
最好笑的一個事情就是,筆者剛建站的時候,購買了國內一家小主機商(名叫主機屋)的虛擬主機,他們宣傳就是全能主機,什么語言都支持。這樣的幌子去騙一些菜鳥還可以,對于一個懂技術的,就只能對他們的伎倆投以鄙視的眼光。后來詢問之后,才知道他們所謂的全能主機,也就僅僅只支持PHP和ASP同時運行(使用IIS運行PHP),連ASP.net都不支持,對于這事,筆者還和他們理論了半天,現在估計再也不敢宣稱全能主機了,這樣的商家,希望所有站長都能遠離,太沒有道德了。
首先說說,什么是全能主機。
所謂的全能主機,就是一臺服務器上面同時支持多個不同的應用服務器運行,并且能通過外部獨立域名訪問的主機。這里的多個,要至少大于等于三個。
因為目前來講,Apache,IIS,Tomcat是目前被廣泛使用的三種Web服務器軟件,其中Apache,tomcat是開源軟件,不僅用于Unix系統,也有基于Win32平臺的版本。
IIS是Windows操作系統自帶的組件,也提供了強大的Internet和Intranet服務功能。這三種服務器軟件各有特色,IIS對ASP+Access的支持比較好,而Apache是PHP+MySQL平臺不二的選擇,Tomcat是運行java語言程序的服務器。 ?
對于各自的環境搭建,可以參考《云主機環境搭建教程之IIS配置篇》,《云主機環境搭建教程之PHP配置篇》,以及《云主機環境搭建教程之Java配置篇》。
大家都知道,http只有一個開放端口,就是80端口。外部通過獨立域名訪問網站的時候,如果不加端口,會默認訪問服務器中80端口下面的網站。很現實,這幾個應用服務器不可能只用一個端口。如果要訪問,則必須通過域名加端口號才能訪問,這樣顯然不利于推廣。因此,我們就需要想辦法讓用戶輸入簡單域名,而我們在后臺截獲域名,然后動態的解析到不同的端口網站上。
按照這樣的思路,筆者想了很多辦法,傳統的就是重新配置IIS,使其支持PHP+MySQL,或者重新配置Apache使其能支持ASP+Access。但考慮到這兩種方法雖然從技術上都能夠實現,但配置過程較復雜,不易于推廣,不利于初學者使用。況且如果你還搭建了java程序,那就更復雜了。
筆者也沒有從事過IDC行業的工作,沒有這方面的經驗。同時也在思考現在那些全能功能是如何實現的。根據筆者的經驗,他們是有一個80端口的服務器做代理分發,將不同的域名分發到不用的應用服務器的網站上。
通過這樣的思路,筆者想到了使用Apache的虛擬主機功能和反向代理模塊來實現。
什么是Apache虛擬主機。在apache的官方技術網站上是這樣定義的。
虛擬主機指的是在單一機器上運行多個網站 (例如 www.company1.com 和 www.company2.com) 。 虛擬主機可以“基于 IP”,即每個 IP 一個站點; 或者“基于名稱”, 即每個 IP 多個站點。這些站點運行在同一物理服務器上的事實不會明顯的透漏給最終用戶。
Apache 是第一個支持基于 IP 的虛擬主機的服務器。 Apache 版本 1.1 和更新的版本同時支持基于 IP 和基于名稱的虛擬主機。 基于名稱的虛擬主機有時候稱為基于主機或非 IP的虛擬主機。
詳細地址:http://httpd.apache.org/docs/2.2/vhosts/
注:本文是基于名稱的虛擬主機配置。
什么是反向代理。
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個web服務器。
那么我們就將Apache服務器做為一個代理web服務器,用它來處理從外部訪問過來的任何請求并且返回給外部。
有興趣的朋友可以了解下什么是正向代理。
名詞術語大概介紹完了,那么本文主要通過一個例子來為大家簡述配置的具體方法。
前言:
仍然以筆者的www.bxw001.com這個域名為例。這個網站是一個ASP+Access網站,建立在IIS6.0下,端口設置為81。如果不使用反向代理,則用戶訪問這個網站時,必須使用www.bxw001.com:81 才能正常訪問,很麻煩。
通過反向代理設置后,用戶仍然使用www.bxw001.com域名網站,但首先會進入到Apache服務器,然后再調轉到IIS下的正式網站去。
設置步驟如下:
1、加載Apache的代理模塊
打開httpd.conf文件,放開以下幾行代碼的注釋,(將前面的#去掉即可),此時Apache就是一個web代理服務器了。
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
2、建立虛擬主機,進行端口重定向
為需要代理的網站建立一個虛擬主機,在此筆者強烈建議,都通過虛擬主機來單獨配置。有些朋友可能直接在httpd.conf文件里修改,這樣雖然也能實現,但是所有的訪問,包括不是代理域名的訪問都會進入被代理的網站去。
因為Apache虛擬主機的加載順序是按照順序來加載的,如果訪問的url配置了虛擬主機,則進行代理訪問,如果沒有,默認是以第一個的。
因此,需要引入虛擬主機單獨的配置文件,在這里面增加虛擬主機配置。
在httpd.conf文件中找到這行代碼,Include conf/extra/httpd-vhosts.conf,去掉#注釋。
以下關于虛擬主機的配置都在httpd-vhosts.conf下進行。
默認Apache提供了兩個樣例,不用管,直接注釋掉,或者在原來上面修改也可以。
我們是要將站點www.bxw001.com域名的所有訪問轉向IIS下面的81端口,先增加一個虛擬主機。代碼如下:
<VirtualHost *:80>
? ?ServerAdmin webmaster@a.com
? ?DocumentRoot "d:/wwwroot/www.bxw.com"
? ?ServerName bxw001.com
? ?ServerAlias www.bxw001.com
? ?ErrorLog "logs/bxw001.com.log"
? ?CustomLog "logs/bxw001.com.log" common
? ?<Directory "d:/wwwroot/www.bxw.com">
? ? Require all granted ?
? ?</Directory>
? ProxyPass / http://localhost:81/
? ProxyPa***everse / http://localhost:81/
</VirtualHost>
解釋:
ServerAdmin:這個就是郵箱,可以默認
DocumentRoot:這個是你被代理的網站的根目錄地址。我們這就是IIS6.0下面的ASP網站目錄。注意目錄斜杠的方向。
ServerName :被代理的域名,這里就是你IIS下ASP網站的獨立域名。
ServerAlias:同上,別名,一般可以寫成一級或者二級域名。
ErrorLog :日志文件地址和名稱。一般以域名作為文件名,方便區分,默認存放在apache的logs目錄下。
<Directory > 設置虛擬主機的目錄的訪問權限。筆者建議權限的設定都在虛擬主機下單獨設置,而不是在httpd.conf中統一設置成所有都可以訪問,這樣不安全。
ProxyPass :這個是關鍵,表示IIS下面ASP網站的真實訪問地址,這里寫成localhost,也可以寫成域名+端口,這要看你在IIS設置的主機頭地址了。如果主機頭默認,那么這里就是localhost。
ProxyPa***everse :反向代理地址,返回給用戶的信息。
同時不要忘記在所有虛擬主機的一開始位置,增加默認虛擬主機配置。
<VirtualHost *:80>
? ? ServerAdmin prograsliu@gmail.com
? ? DocumentRoot "D:/wamp/www"
? ? ServerName localhost
? ? ServerAlias localhost ? ?
? ? <Directory "d:/wamp/www">
? ? ? ? Options FollowSymLinks
? ? ? ? AllowOverride All
? ? ? ? Order allow,deny
? ? ? ? Allow from all
? ? </Directory>
</VirtualHost>
這個默認,你可以設置成Apache的www目錄。
以上兩步操作完成后,保存后重啟Apache服務。你可以試著訪問ASP網站的域名www.bxw001.com,不要加端口號,看看是否可以正常訪問了。呵呵。
如果要增加多個IIS網站或者JAVA網站,只要按照上面的步驟2中的代碼增加虛擬主機即可,同時將代理域名寫成你需要被代理的網站的URL即可。
通過這樣操作,就可以完美實現一個全能主機了,你可以隨便在服務器上搭建多個不同環境的網站了。更多關于主機配置與問題的解決文章,請繼續關注本博客。
轉載于:https://blog.51cto.com/pin18/1250497
總結
以上是生活随笔為你收集整理的使用Apache反向代理实现全能主机的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Phone重绘机制drawRect 转
- 下一篇: Linux系统的启动过程