apache做反向代理服務器



Apache代理分爲正向代理和反向代理

1 正向代理: 客戶端無法直接訪問外部的web,需要在客戶端所在的網絡內架設一臺代理服務器,客戶端通過代理服務器訪問外部的web(需要在客戶端的瀏覽器中設置代理服務器)

適用於: ①局域網的代理服務器(一般是網關,相當於squid的一般用法)
②訪問某個受限網絡的代理服務器,如教育網訪問某些國外網站需要找代理
2 反向代理: 客戶端能訪問外部的web,但是不能訪問目標web,目標web所在的網絡內一臺機器充當目標web的代理,客戶端直接訪問代理就像訪問目標web一樣(此代理對客戶端透明,即客戶端不用做如何設置,並不知道實際訪問的只是代理而已,以爲就是訪問的目標)
適用於: ①idc的某臺目標機器只對內開放web,外部的客戶端要訪問,就讓另一臺機器做proxy,外部直接訪問proxy即相當於訪問目標
②idc的目標機器的某個特殊的web服務跑在非正常端口如9000,而防火牆上只對外開放了80,此時可在80上做proxy映射到9000,外部訪問80即相當於9000
簡單示意圖如下
clip_p_w_picpath005
clip_p_w_picpath006
本例中
機器192.168.0.114是我們的reverse proxy server
apache/2.0.63運行在其80端口
上面有兩個域名的虛擬主機
www.a.org
www.b.org
要實現的效果是:
訪問 www.a.org 即相當於訪問另一臺機器192.168.0.115
訪問 www.b.org 即相當於訪問本機的9000端口
apache的proxy功能由其proxy模塊實現.加載模塊有兩種方式:靜態和動態,現分別說明:
一 靜態加載
靜態加載,在編譯apache時候編譯進去,編譯參數如下:
"./configure" \
"-prefix=/usr/local/apache3" \
"--enable-so" \
"--enable-rewrite" \
"--with-mpm=prefork" \
"--enable-proxy" \ (這個參數即是代理模塊啓用)
安裝完成後查看模塊列表
/usr/local/apache3/bin/httpd -l
顯示
Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_proxy.c
proxy_connect.c
proxy_ftp.c
proxy_http.c
prefork.c
http_core.c
.......
編輯配置文件 httpd.conf
在虛擬主機部分
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.a.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.0.115/
ProxyPa***everse / http://192.168.0.115/
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.b.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:9000/
ProxyPa***everse / http://127.0.0.1:9000/
</VirtualHost>
二 動態加載
動態加載:編譯進一個已經裝好了的apache中(編譯爲dso模塊)
已經裝好的apache在 /usr/local/apache2
進入apache源碼的模塊目錄進行編譯
cd httpd-2.0.63/modules/proxy/
/usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_connect.c proxy_http.c proxy_util.c
從輸出裏面看到apache的modules目錄下已經產生了mod_proxy.so,且已經在httpd.conf中激活了
cd /usr/local/apache2/conf/
ls ../modules/ 看到確實有mod_prxoy.so
編輯配置文件
vi httpd.conf
修改如下
加載模塊
LoadModule proxy_module modules/mod_proxy.so (這句是編譯激活時產生的)
LoadModule proxy_http_module modules/mod_proxy.so (這句是要手動添加的)
虛擬主機的部分加上
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.a.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.0.115/
ProxyPa***everse / http://192.168.0.115/
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.b.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:9000/
ProxyPa***everse / http://127.0.0.1:9000/
</VirtualHost>
重啓apache生效
注:
如果不加LoadModule proxy_http_module modules/mod_proxy.so,則瀏覽器頁面打不開,頁面顯示
Forbidden
You don't have permission to access / on this server.
日誌acess_log裏面顯示
192.168.0.28 - - [03/Jun/2009:16:16:27 +0800] "GET /?sessionId=4293567494722637330&rand=1244014624405&CONTEXT=0&page=com.othe
r.AjaxWhoWhatUpdate&xrand=1244016991554&wwRandId=1244014624405&wwBugId=2341&wwType=View HTTP/1.1" 403 315
或者
192.168.0.28 - - [03/Jun/2009:17:10:32 +0800] "GET / HTTP/1.1" 403 315
即403錯誤
日誌error_log裏面顯示
[Wed Jun 03 17:08:46 2009] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_p
roxy, make sure the proxy submodules are included in the configuration using LoadModule.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章