apache代理設置
apache代理分為正向代理和反向代理:
1 正向代理: 客戶端無法直接訪問外部的web,需要在客戶端所在的網(wǎng)絡內(nèi)架設一臺代理服務器,客戶端通過代理服務器訪問外部的web(需要在客戶端的瀏覽器中設置代理服務器)
適用于: ①局域網(wǎng)的代理服務器(一般是網(wǎng)關(guān),相當于squid的一般用法)
②訪問某個受限網(wǎng)絡的代理服務器,如教育網(wǎng)訪問某些國外網(wǎng)站需要找代理
2 反向代理: 客戶端能訪問外部的web,但是不能訪問目標web,目標web所在的網(wǎng)絡內(nèi)一臺機器充當目標web的代理,客戶端直接訪問代理就像訪問目標web一樣(此代理對客戶端透明,即客戶端不用做如何設置,并不知道實際訪問的只是代理而已,以為就是訪問的目標)
適用于: ①idc的某臺目標機器只對內(nèi)開放web,外部的客戶端要訪問,就讓另一臺機器做proxy,外部直接訪問proxy即相當于訪問目標
②idc的目標機器的某個特殊的web服務跑在非正常端口如9000,而防火墻上只對外開放了80,此時可在80上做proxy映射到9000,外部訪問80即相當于9000
本例中
機器192.168.0.114是我們的reverse proxy server
apache/2.0.63運行在其80端口
上面有兩個域名的虛擬主機
www.a.org
www.b.org
要實現(xiàn)的效果是:
訪問 www.a.org 即相當于訪問另一臺機器192.168.0.115
訪問 www.b.org 即相當于訪問本機的9000端口
apache的proxy功能由其proxy模塊實現(xiàn).加載模塊有兩種方式:靜態(tài)和動態(tài),現(xiàn)分別說明:
一 靜態(tài)加載
靜態(tài)加載,在編譯apache時候編譯進去,編譯參數(shù)如下:
"./configure"
"-prefix=/usr/local/apache3"
"--enable-so"
"--enable-rewrite"
"--with-mpm=prefork"
"--enable-proxy" (這個參數(shù)即是代理模塊啟用)
安裝完成后查看模塊列表
/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 webmaster@dummy-host.example.com
ServerName www.a.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.0.115/
ProxyPassReverse / http://192.168.0.115/
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName www.b.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
二 動態(tài)加載
動態(tài)加載:編譯進一個已經(jīng)裝好了的apache中(編譯為dso模塊)
已經(jīng)裝好的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目錄下已經(jīng)產(chǎn)生了mod_proxy.so,且已經(jīng)在httpd.conf中激活了
cd /usr/local/apache2/conf/
ls ../modules/ 看到確實有mod_prxoy.so
編輯配置文件
vi httpd.conf
修改如下
加載模塊
LoadModule proxy_module modules/mod_proxy.so (這句是編譯激活時產(chǎn)生的)
LoadModule proxy_http_module modules/mod_proxy.so (這句是要手動添加的)
虛擬主機的部分加上
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName www.a.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.0.115/
ProxyPassReverse / http://192.168.0.115/
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName www.b.org
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / 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.